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

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

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

Категории без постов создают пустые архивы, по которым поисковые системы могут снизить рейтинг сайта из-за недостатка уникального контента. Кроме того, пустые категории ухудшают пользовательский опыт, так как приводят к страницам с сообщением «Записей не найдено».

Удаление таких категорий помогает поддерживать структуру сайта в порядке и улучшает индексацию.

Как найти категории без записей в WordPress

В WordPress все категории хранятся как термины таксономии category. Каждая категория содержит поле count, которое показывает количество записей, прикрепленных к ней.

Для поиска пустых категорий можно использовать WP_Query или функции терминологии WordPress. Вот пример простого способа получить список таких категорий через PHP:

function wpbit_get_empty_categories() {
    $args = [
        'taxonomy' => 'category',
        'hide_empty' => true,
    ];
    $categories = get_categories($args);
    $empty_categories = [];
    $all_categories = get_categories(['taxonomy' => 'category', 'hide_empty' => false]);

    foreach ($all_categories as $cat) {
        if ($cat->count == 0) {
            $empty_categories[] = $cat;
        }
    }
    return $empty_categories;
}

Этот код получает все категории и фильтрует те, у которых count равен 0.

Автоматическое удаление категорий без записей — пример кода

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

function wpbit_delete_empty_categories() {
    $empty_categories = wpbit_get_empty_categories();
    foreach ($empty_categories as $cat) {
        wp_delete_term($cat->term_id, 'category');
    }
}

// Запускаем удаление категорий
wpbit_delete_empty_categories();

Вы можете вызывать эту функцию вручную, например, в файле functions.php вашей темы или в плагине. Для регулярной автоматизации можно использовать WP-Cron.

Автоматизация удаления через WP-Cron

Чтобы запускать удаление пустых категорий по расписанию, добавим задачу в WP-Cron:

// Регистрируем событие при активации темы или плагина
if (!wp_next_scheduled('wpbit_cron_delete_empty_categories')) {
    wp_schedule_event(time(), 'daily', 'wpbit_cron_delete_empty_categories');
}

// Хук для удаления категорий
add_action('wpbit_cron_delete_empty_categories', 'wpbit_delete_empty_categories');

Теперь функция будет запускаться один раз в сутки и удалять пустые категории автоматически.

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

Если вы не хотите писать код, можно использовать плагины. Среди популярных решений:

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

Для интеграции с WPShop можно рекомендовать Clearfy Pro, который помогает оптимизировать сайт, включая очистку таксономий и удаление пустых категорий.

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

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

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

Если категории используются в меню или виджетах, после удаления могут появиться ошибки, проверьте и обновите их.

Как проверить результат удаления категорий

Для проверки вы можете вывести список категорий до и после удаления пустых:

function wpbit_list_categories() {
    $cats = get_categories(['taxonomy' => 'category', 'hide_empty' => false]);
    echo '<ul>';
    foreach ($cats as $cat) {
        echo '<li>' . esc_html($cat->name) . ' (ID: ' . $cat->term_id . ', count: ' . $cat->count . ')</li>';
    }
    echo '</ul>';
}

Вызовите эту функцию до и после удаления, чтобы убедиться, что все пустые категории успешно удалены.

Как автоматизировать удаление старых записей WordPress через шорткод
01.01.2026
Как автоматически изменять заголовки постов WordPress по шаблону
10.03.2026
Как удалить или заблокировать регистрацию пользователей в WordPress
09.01.2026
Как установить и очистить очередь AJAX в WordPress для улучшения производительности
27.03.2026
Автоматизация обновления подписок в WordPress через AJAX
21.01.2026