wpclean.ru wordpress WPClean.ru

Удаление неиспользуемых коллекций (категорий товаров) в WooCommerce

Диагностика: как понять, что есть неиспользуемые категории товаров в WooCommerce

Неиспользуемые категории товаров (таксономия product_cat) могут накапливаться после импорта, миграций или изменений ассортимента. Они занимают место в базе данных, замедляют запросы и создают беспорядок в админке.

Проверить наличие неиспользуемых категорий можно тремя способами:

  • В админке WooCommerce — раздел «Товары» > «Категории». Обратите внимание на категории с нулевым количеством товаров.
  • Через SQL-запрос, который покажет категории без товаров:
SELECT t.term_id, t.name FROM wp_terms t
JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
LEFT JOIN wp_term_relationships tr ON tt.term_taxonomy_id = tr.term_taxonomy_id
WHERE tt.taxonomy = 'product_cat'
GROUP BY t.term_id
HAVING COUNT(tr.object_id) = 0;
  • С помощью WP-CLI:
wp term list product_cat --field=term_id --format=csv | xargs -I % wp term get product_cat % --field=count | grep '^0$' -B 1

Если вы обнаружили много категорий без товаров, их имеет смысл удалить.

Пошаговое удаление неиспользуемых категорий WooCommerce

1. Резервное копирование базы данных

Перед любыми изменениями сделайте полный бэкап базы данных. Можно использовать плагин UpdraftPlus или экспорт через хостинг.

2. Удаление через админку вручную

Если категорий немного, удалите их через Товары > Категории, выбрав нужные и удалив через массовые действия.

3. Автоматизация удаления через PHP-код

Для массового удаления категорий без товаров используйте следующий скрипт, который можно добавить в functions.php темы или выполнить через WP-CLI с помощью wp eval-file:

function delete_empty_product_categories() {
    $empty_cats = get_terms(array(
        'taxonomy' => 'product_cat',
        'hide_empty' => true, // true значит только с товарами, нам нужно false
        'fields' => 'ids',
        'meta_query' => array(),
    ));

    // Получаем все категории, включая пустые
    $all_cats = get_terms(array(
        'taxonomy' => 'product_cat',
        'hide_empty' => false,
        'fields' => 'ids',
    ));

    // Определяем пустые категории
    $empty_cats = array_diff($all_cats, wp_list_pluck(get_terms(array(
        'taxonomy' => 'product_cat',
        'hide_empty' => true,
        'fields' => 'ids',
    )), 'term_id'));

    foreach ($empty_cats as $cat_id) {
        wp_delete_term($cat_id, 'product_cat');
    }
    return count($empty_cats);
}

// Запускаем функцию
$deleted_count = delete_empty_product_categories();
echo "$deleted_count категорий удалено.";

4. Удаление через SQL-запрос

Если вы уверены в своих действиях, можно использовать SQL для удаления пустых категорий:

DELETE t, tt FROM wp_terms t
JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
LEFT JOIN wp_term_relationships tr ON tt.term_taxonomy_id = tr.term_taxonomy_id
WHERE tt.taxonomy = 'product_cat'
GROUP BY t.term_id
HAVING COUNT(tr.object_id) = 0;

Внимание: перед выполнением сделайте резервную копию и протестируйте на копии сайта.

Проверка результата: как убедиться, что удаление прошло успешно

  • Вернитесь в админку WooCommerce > Категории, проверьте, что пустых категорий больше нет.
  • Повторите SQL-запрос из раздела диагностики — запрос должен вернуть пустой результат.
  • Проверьте работу сайта и фильтров товаров, чтобы убедиться, что ничего не сломалось.

Частые ошибки и как их исправить

  • Ошибка: Категории не удаляются через wp_delete_term — возможно, есть дочерние категории или связи с другими постами.
    Решение: Проверьте и удалите дочерние категории перед удалением родительских.
  • Ошибка: SQL-запрос удалил категории с товарами.
    Решение: Проверьте точность запроса, используйте LEFT JOIN и HAVING COUNT(tr.object_id) = 0 для исключения категорий с товарами.
  • Ошибка: После удаления категории отображаются в фильтрах или виджетах.
    Решение: Очистите кэш сайта, кэш плагинов и браузера.

Практические советы по безопасности и производительности

  • Всегда делайте резервные копии перед удалением данных.
  • Проводите удаление на тестовом сайте перед продакшеном.
  • Для массового удаления используйте WP-CLI или скрипты с ограничением по времени выполнения, чтобы избежать таймаутов.
  • После удаления оптимизируйте таблицы базы данных с помощью SQL-команды OPTIMIZE TABLE wp_terms, wp_term_taxonomy, wp_term_relationships;
  • Используйте плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?source=wpclean.ru&medium=article&campaign=udaleniye-neispolzuemykh-kollektsiy-v-woocommerce) для комплексной очистки и оптимизации WooCommerce и WordPress.

Сравнение способов удаления неиспользуемых категорий WooCommerce

МетодПлюсыМинусыРекомендации
Удаление через админкуПросто, визуально контролируемоТрудоемко при большом количестве категорийДля малого числа категорий
PHP-скрипт (wp_delete_term)Автоматизация, контроль из кодаТребует навыков, может быть медленнымДля массовой чистки, тестировать на копии
SQL-запрос напрямуюСамый быстрый способ, массовое удалениеРиск повреждения данных, требует бэкапаТолько для опытных, после резервного копирования
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее