Диагностика проблемы: пустые категории в 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, часто дополнительные функции | Может нагружать сайт, лишние зависимости |