Диагностика проблемы: зачем удалять неиспользуемые категории WooCommerce
В магазине на WooCommerce со временем накапливаются категории, которые не связаны ни с одним товаром. Они создают беспорядок в админке, могут мешать SEO и сбивать покупателей. Часто категории создаются автоматически или вручную, но затем товары из них удаляются, а сами категории остаются.
Чтобы проверить, есть ли неиспользуемые категории, зайдите в Товары > Категории и посмотрите число товаров напротив каждой категории. Если число равно нулю — категория пустая и скорее всего не нужна.
Пошаговое решение: удаляем категории без товаров через код
1. Создаем резервную копию базы данных
Перед изменениями в базе данных сделайте резервную копию. Это позволит восстановить данные при ошибках.
2. Создаем и запускаем PHP-скрипт для удаления пустых категорий
Добавьте следующий код в файл functions.php вашей активной темы или в отдельный файл, который можно запустить один раз (например, через WP-CLI или подключение через админку):
function delete_empty_woocommerce_categories() {
$args = array(
'taxonomy' => 'product_cat',
'hide_empty' => false,
);
$categories = get_terms($args);
foreach ($categories as $category) {
if ($category->count == 0) {
wp_delete_term($category->term_id, 'product_cat');
error_log('Удалена пустая категория: ' . $category->name);
}
}
}
add_action('admin_init', 'delete_empty_woocommerce_categories');Этот код при заходе в админку удалит все категории товаров, у которых нет товаров (count == 0).
3. Удаляем код после выполнения
Чтобы не удалять категории при каждом заходе в админку, удалите или закомментируйте функцию после однократного запуска.
Как проверить, что решение сработало
- Перейдите в Товары > Категории и убедитесь, что пустых категорий больше нет.
- Проверьте логи ошибок сервера (если включено), чтобы увидеть сообщения об удалённых категориях.
- Проверьте фронтенд сайта — страницы категорий с товарами должны отображаться корректно, а неиспользуемых категорий не должно быть.
Частые ошибки при удалении категорий WooCommerce и как их исправить
- Категории не удаляются: возможно, функция запускается не в нужном месте или в неправильном хуке. Используйте
admin_initили запустите через WP-CLI. - Удаляются нужные категории: проверьте, что условие
$category->count == 0работает корректно — категория должна быть пустой. - Ошибка базы данных: проверьте права пользователя БД и наличие term_id у категорий.
- Категории возвращаются после кэширования: очистите кэш сайта и плагинов кэширования.
Практические советы по безопасности и производительности
- Запускайте удаление в часы низкой нагрузки, чтобы избежать задержек.
- Всегда делайте резервную копию базы данных до изменений.
- Удаляйте код удаления сразу после успешного выполнения, чтобы не запускать его каждый раз.
- Если у вас много категорий, делайте удаление пакетами, чтобы не перегружать сервер.
Альтернативные варианты удаления пустых категорий
| Метод | Плюсы | Минусы |
|---|---|---|
Код через functions.php | Быстро, без плагинов, точечное | Нужно знать PHP, риск ошибок при неправильном коде |
| WP-CLI команда | Эффективно на больших сайтах, без нагрузки на веб-сервер | Требуются права SSH и знания CLI |
| Плагины очистки базы | Удобно, интерфейс для выбора категорий | Дополнительная нагрузка, риски совместимости |