Диагностика проблемы: почему в WooCommerce появляются пустые категории
Пустые категории WooCommerce — это категории товаров, в которых нет ни одного опубликованного товара. Они появляются по разным причинам: удаление товаров без очистки категорий, импорт с ошибками, тестирование новых категорий, либо автоматические скрипты, создающие категории с ошибками. Наличие таких категорий мешает навигации и ухудшает SEO.
Как проверить пустоту категорий вручную и программно
- В админке WordPress перейдите в Товары – Категории и обратите внимание на столбец «Количество товаров». Пустые категории будут показывать 0.
- Чтобы проверить программно, используйте WP-CLI команду:
wp term list product_cat --field=term_id --format=csv | xargs -I % wp term meta get % product_countЗначение product_count показывает количество товаров в категории. Можно написать более сложный скрипт, чтобы вывести все категории с нулём товаров.
Пошаговое удаление пустых категорий через functions.php
Удаление пустых категорий можно сделать через код, добавив следующий сниппет в файл functions.php вашей дочерней темы или в плагин для кастомного кода:
function delete_empty_woocommerce_categories() {
// Получаем все категории товаров
$args = array(
'taxonomy' => 'product_cat',
'hide_empty' => false, // Получать все, даже пустые
);
$categories = get_terms( $args );
if ( empty( $categories ) || is_wp_error( $categories ) ) {
return;
}
foreach ( $categories as $category ) {
// Если товаров в категории 0 - удаляем
if ( $category->count == 0 ) {
wp_delete_term( $category->term_id, 'product_cat' );
}
}
}
// Запускаем функцию один раз при активации темы или вручную
// delete_empty_woocommerce_categories();Внимание: Уберите комментарий с вызова функции, запустите один раз, затем удалите вызов, чтобы не удалить категории повторно.
Альтернативный способ: WP-CLI для массового удаления
Для тех, кто имеет доступ к терминалу сервера и WP-CLI, можно удалить пустые категории командой:
wp term list product_cat --field=term_id --format=csv | xargs -I % bash -c 'count=$(wp term get % --field=count --taxonomy=product_cat); if [ "$count" -eq 0 ]; then wp term delete product_cat %; fi'Проверка результата после удаления
Чтобы убедиться, что пустые категории удалены, выполните:
- Перейдите в админку WooCommerce → Категории, проверьте, что количество категорий с 0 товарами отсутствует.
- Программно можно повторно выполнить код получения категорий с
count == 0— список должен быть пуст.
Частые ошибки и как их исправить
- Ошибка: Категории не удаляются, хотя
count == 0.
Причина: Категории могут содержать скрытые/черновые товары, либо они связаны с другими терминами.
Решение: Проверьте, что у категории действительно нет опубликованных товаров. Используйте фильтр по статусу товара в WP_Query. - Ошибка: Удаляются нужные категории.
Причина: Неверная логика определения пустоты.
Решение: Для точности можно проверять товары именно с опубликованным статусом:
function is_category_empty( $term_id ) {
$query = new WP_Query( array(
'post_type' => 'product',
'post_status' => 'publish',
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => $term_id,
),
),
'fields' => 'ids',
'posts_per_page' => 1,
) );
return ( $query->found_posts == 0 );
}Далее используйте эту функцию перед удалением.
Решение: Сделайте резервную копию базы данных перед выполнением удаления.
Практические советы по безопасности и производительности
- Перед массовым удалением категорий всегда делайте резервную копию базы.
- Запускайте код удаления вручную и однократно, чтобы избежать случайного удаления.
- Если на сайте много категорий, для удаления используйте WP-CLI — это эффективнее и безопаснее.
- Для улучшения SEO, после удаления категорий настройте редиректы со старых URL или очистите кэш.
Сравнение методов удаления пустых категорий WooCommerce
| Метод | Преимущества | Недостатки | Рекомендуется для |
|---|---|---|---|
| Код в functions.php | Прямо в WordPress, без доп. инструментов | Нужно вручную запускать, риск ошибки | Малые сайты, девелоперы с доступом к коду |
| WP-CLI | Быстро, можно скриптовать, безопасно для больших сайтов | Требует доступа к серверу и навыков CLI | Средние и крупные проекты, автоматизация |
| Плагины | Простота использования, интерфейс | Нагрузка, возможно избыточный функционал | Новички, администраторы без доступа к коду |