wpcat.ru wordpress WPCat.ru

Как удалить категории с пустыми товарами в WooCommerce

Диагностика проблемы: пустые категории в WooCommerce

В WooCommerce иногда появляются категории, в которых нет товаров. Это может запутать пользователей и ухудшить SEO, так как пустые категории создают «мусор» в структуре сайта. Часто такая ситуация возникает при массовом импорте товаров, удалении товаров или изменении категорий.

Чтобы убедиться, что категория действительно пустая, можно проверить количество товаров через админку WooCommerce или напрямую в базе данных.

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

  • Перейдите в Товары > Категории.
  • Обратите внимание на столбец Количество — это количество товаров в категории.
  • Если значение равно 0, категория пустая.

Проверка через базу данных

Для точной диагностики можно выполнить SQL-запрос:

SELECT t.term_id, t.name, COUNT(p.ID) as product_count
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
LEFT JOIN wp_posts p ON tr.object_id = p.ID AND p.post_type = 'product' AND p.post_status = 'publish'
WHERE tt.taxonomy = 'product_cat'
GROUP BY t.term_id
HAVING product_count = 0;

Этот запрос выведет список пустых категорий.

Пошаговое решение: как автоматически удалить пустые категории

Удалять категории вручную неудобно при большом количестве. Оптимально использовать PHP-код, который можно добавить в functions.php дочерней темы или в отдельный плагин.

function wpcat_delete_empty_product_categories() {
  $args = array(
    'taxonomy' => 'product_cat',
    'hide_empty' => false,
  );
  $categories = get_terms($args);
  if (is_wp_error($categories)) return;

  foreach ($categories as $category) {
    $count = $category->count;
    if ($count === 0) {
      wp_delete_term($category->term_id, 'product_cat');
    }
  }
}

// Запускаем функцию один раз
add_action('init', function() {
  if (isset($_GET['wpcat_delete_empty_cats']) && current_user_can('manage_woocommerce')) {
    wpcat_delete_empty_product_categories();
    echo 'Пустые категории удалены';
    exit;
  }
});

Для запуска достаточно перейти по URL https://ваш-сайт.ru/?wpcat_delete_empty_cats=1 будучи администратором.

Проверка результата

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

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

  • Категории не удаляются: возможно, недостаточно прав пользователя или функция вызвана не из админки. Проверьте capability manage_woocommerce.
  • Пустые категории отображаются: WooCommerce может кэшировать категории, очистите кэш сайта (если используется кеш-плагин).
  • Ошибка при вызове функции: убедитесь, что функция вызывается после загрузки WooCommerce (например, на хуке init), и что WooCommerce активен.

Практические советы по оптимизации и безопасности

  • Не запускайте удаление автоматически на каждой загрузке — используйте триггер по запросу или cron с ограничениями.
  • Перед удалением категорий сделайте резервную копию базы данных, чтобы избежать потери данных.
  • Если на сайте много категорий, выполните удаление пакетно, чтобы избежать тайм-аутов.
  • Если используете кеширование, после удаления очистите кэш.
  • Можно интегрировать очистку пустых категорий в Clearfy Pro (https://wpshop.ru/plugins/clearfy?source=wpcat.ru&medium=article&campaign=kak-udalit-kategorii-s-pustymi-zapisyami-v-woocommerce) для автоматизации и улучшения SEO.

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

МетодПлюсыМинусы
Удаление вручную через админкуПросто, без кодаТрудоемко при большом количестве категорий
PHP-скрипт (как в статье)Автоматизация, быстроТребует базовых знаний кода, риски при ошибках
Плагины для очистки WooCommerceУдобный UI, часто дополнительные функцииМожет нагружать сайт, лишние зависимости
×
День SEO
Время сделать подарок своему WordPress!
-20% на премиум

шаблоны и плагины

Порадуй свой сайт ⋙