Как удалить пустые категории в WordPress через код

В процессе работы с WordPress накапливается множество категорий, которые могут оставаться пустыми — без связанных с ними записей. Такие категории не только создают беспорядок в админке, но и негативно влияют на SEO и юзабилити. В этой статье подробно разберём, как программно удалять пустые категории в WordPress, используя собственные функции и удобные плагины.

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

Пустые категории — это таксономии, к которым не привязано ни одной записи. Они могут появляться в результате удаления записей, миграции контента или ошибочных действий. Если не очищать такие категории, это приводит к:

  • загромождению панели администратора и усложнению навигации;
  • появлению неиндексируемых страниц в поисковиках, что снижает SEO;
  • потере эффективности фильтров и виджетов категорий на сайте.

Решить проблему можно вручную, но при большом объёме категорий это неудобно. Автоматизация с помощью кода — лучший вариант.

Как проверить наличие пустых категорий в WordPress

Для начала стоит просмотреть список категорий, чтобы убедиться, какие из них пустые. Это можно сделать через админку в разделе Записи → Рубрики, где в столбце "Записей" отображается количество записей в категории.

Чтобы вывести пустые категории программно, используйте следующий код, который можно добавить, например, в файл functions.php вашей темы или в отдельный плагин:

function wp1_get_empty_categories() {
    $empty_categories = get_categories(array(
        'hide_empty' => true,
        'fields' => 'ids',
        'number' => 0
    ));

    $all_categories = get_categories(array(
        'hide_empty' => false,
        'fields' => 'ids'
    ));

    $empty = array_diff($all_categories, $empty_categories);
    return $empty;
}

Этот код получает все категории и категории с записями, после чего вычисляет пустые.

Удаление пустых категорий через PHP-код

Чтобы удалить все пустые категории, можно использовать функцию wp1_delete_empty_categories(). Ниже пример реализации:

function wp1_delete_empty_categories() {
    $empty_cats = wp1_get_empty_categories();

    foreach ($empty_cats as $cat_id) {
        wp_delete_category($cat_id);
    }
}

Вызов этой функции удалит пустые категории. Рекомендуется запускать её разово или через WP-CLI, чтобы случайно не удалить нужные категории.

Для запуска функции вручную, например, через админку, можно добавить временный экшен:

add_action('admin_init', function() {
    if (current_user_can('manage_options') && isset($_GET['wp1_delete_empty_cats'])) {
        wp1_delete_empty_categories();
        wp_redirect(admin_url('edit-tags.php?taxonomy=category'));
        exit;
    }
});

Теперь достаточно перейти по ссылке https://ваш-сайт.ru/wp-admin/edit-tags.php?taxonomy=category&wp1_delete_empty_cats=1 с правами администратора, чтобы запустить удаление.

Автоматизация удаления пустых категорий с помощью Cron

Если хотите регулярно очищать пустые категории, можно установить периодический запуск функции через WP-Cron:

function wp1_schedule_empty_cat_cleanup() {
    if (!wp_next_scheduled('wp1_cleanup_empty_categories_hook')) {
        wp_schedule_event(time(), 'weekly', 'wp1_cleanup_empty_categories_hook');
    }
}
add_action('wp', 'wp1_schedule_empty_cat_cleanup');

add_action('wp1_cleanup_empty_categories_hook', 'wp1_delete_empty_categories');

Этот код запускает функцию удаления пустых категорий раз в неделю. Период можно изменить на «daily» или «monthly» по необходимости.

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

Если вы не хотите работать с кодом, существуют плагины, которые помогают управлять категориями и удалять пустые:

  • Term Management Tools — расширяет возможности таксономий, в том числе позволяет сливать и удалять термины.
  • Bulk Delete — мощный инструмент для массового удаления постов и таксономий по разным условиям, включая пустые категории.

Например, Bulk Delete предлагает удобный интерфейс и гибкие фильтры для очистки категорий без необходимости писать код.

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

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

  • Перед удалением поста проверяйте, не останется ли категория без записей.
  • Используйте кастомные сообщения или предупреждения для администраторов при удалении категорий.
  • Для новостных сайтов и блогов планируйте структуру категорий заранее, чтобы не создавать лишних.

Также можно настроить автоматическое удаление категории, если к ней не привязано записей более определённого времени, реализовав это через WP-Cron и дополнительную логику.

Пример расширенного кода: удаление пустых категорий старше 30 дней

Более сложный вариант — удалять только те пустые категории, которые существуют пустыми дольше месяца:

function wp1_delete_old_empty_categories() {
    $empty_cats = wp1_get_empty_categories();

    foreach ($empty_cats as $cat_id) {
        $category = get_category($cat_id);
        if (!$category) continue;

        $term_created = get_term_meta($cat_id, 'wp1_term_created', true);
        if (!$term_created) {
            // Если мета отсутствует, сохраняем текущую дату
            update_term_meta($cat_id, 'wp1_term_created', time());
            continue;
        }

        if (time() - $term_created > 30 * DAY_IN_SECONDS) {
            wp_delete_category($cat_id);
        }
    }
}

Для корректной работы нужно при создании категории добавлять мета с датой создания, что можно сделать через хук created_category. Это позволит точно отслеживать время существования пустых категорий.

Реализация сохранения даты создания категории:

add_action('created_category', function($term_id, $tt_id) {
    update_term_meta($term_id, 'wp1_term_created', time());
}, 10, 2);
Custom Post Types в WordPress: практическое руководство по созданию и использованию
10.11.2025
Как создать динамические формы в WordPress с помощью REST API
05.04.2026
Автоматическое удаление неактивных пользователей WooCommerce: практическое руководство
17.04.2026
Как установить ограничение на число публикаций в WordPress для конкретного пользователя
21.02.2026
Как правильно удалить кэш Redis в WordPress: практическое руководство
13.01.2026