Изменить имя категории продуктов Woocommerce с помощью SQL-запроса - PullRequest
0 голосов
/ 26 ноября 2018


Я хочу обновить в Wordpress многие имена product_category, извлекая их из файла csv.
заголовок файла csv просто: (ID; Product_category_Name)
У меня есть 900 категорий и подкатегорий виерархическая структура.
можно ли искать в БД категорию по ID и обновлять название категории?
сохранит ли это правильную иерархическую структуру?
могу ли я включить в имена некоторые символы типа 'ö' 'ä' или 'å' в UTF-8?Я могу использовать функции wp php или прямые команды sql.

1 Ответ

0 голосов
/ 26 ноября 2018

Этот ответ отвечает на название вашего вопроса, но не на все остальные вопросы (см. , как задать ) .

Вы можете использоватьследующий запрос SQL (создание резервной копии базы данных ранее) :

    UPDATE wp_terms as a
    JOIN wp_term_taxonomy b ON a.term_id = b.term_id
    SET a.name = 'new_name', 
        a.slug = 'new_slug'
    WHERE b.taxonomy = 'product_cat'
    AND a.name = 'old_name'

Где вам нужно будет заменить:

  • new_name на ваш новый продуктназвание категории
  • new_slug для вашей новой категории продуктов слаг (строчные буквы и "-" заменяют пробелы)
  • old_name для вашей старой категории продуктовимя (тот, который вы хотите заменить)

Вы также можете использовать следующую функцию с тем же SQL-запросом:

function rename_product_category( $old_name, $new_name ){
    global $wpdb;

    // Check that the new name doesn't exist
    if( term_exists( $new_name, 'product_cat' ) )
        return __("Your new product category term name already exist");

    // Check that the old name exist
    if( ! term_exists( $old_name, 'product_cat' ) )
        return __("Your old product category term name doesn't exist");

    $new_slug = sanitize_title( $new_name );

    $result = $wpdb->query("
        UPDATE {$wpdb->prefix}terms as a
        JOIN {$wpdb->prefix}term_taxonomy b ON a.term_id = b.term_id
        SET a.name = '$new_name',
            a.slug = '$new_slug'
        WHERE b.taxonomy = 'product_cat'
        AND a.name = '$old_name'
    ");

     if($result)
        return sprintf(
            __("The product category %s has been renamed to %s."),
            '"<strong>' . $old_name . '</strong>"',
            '"<strong>' . $new_name . '</strong>"'
        );
    else
        return __("Something is wrong!.");
}

Кодидет в файл function.php вашей активной дочерней темы (или активной темы).

ИСПОЛЬЗОВАНИЕ (Допустим, вы переименуете категорию продукта "Одежда" в "Одежда") :

echo rename_product_category( 'Clothing', 'Wear' );

Это будетпоказать, была ли категория продукта переименована или нет.Проверено и работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...