Как автоматизировать удаление старых категорий в WordPress

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

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

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

  • Поддерживать чистую и понятную структуру сайта;
  • Избавляться от мусора в административной панели;
  • Улучшать SEO за счёт более чёткой тематики;
  • Облегчать работу редакторов и авторов контента.

Если на сайте сотни категорий, многие из которых не привязаны ни к одному посту, автоматизация их удаления сэкономит много времени.

Как определить старые категории для удаления: критерии и выборка

Прежде чем удалять категории, нужно чётко определить, что считать «старыми» или «ненужными». Вот несколько критериев:

  • Категории, у которых нет ни одного связанного поста (count=0).
  • Категории, которым не назначались посты за последние N месяцев.
  • Категории, которые не используются в меню и не связаны с другими таксономиями.

Рассмотрим на примере, как получить список категорий без постов на PHP:

function wpunit_get_empty_categories() {
    $args = array(
        'taxonomy' => 'category',
        'hide_empty' => true,
    );
    $categories = get_categories($args);
    $all_categories = get_categories(array('taxonomy' => 'category', 'hide_empty' => false));

    $empty_cats = array();
    foreach ($all_categories as $cat) {
        if (!in_array($cat, $categories)) {
            $empty_cats[] = $cat;
        }
    }
    return $empty_cats;
}

В этом коде мы получаем все категории и те, что используются (hide_empty=true). Разница — категории без постов.

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

Чтобы удалять старые категории автоматически, можно использовать планировщик задач WP-Cron. В рамках домена wpunit.ru удобно применить метод wpunit_schedule_event для создания повторяющейся задачи.

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

function wpunit_delete_empty_categories() {
    $empty_cats = wpunit_get_empty_categories();
    foreach ($empty_cats as $cat) {
        wp_delete_category($cat->term_id);
    }
}

function wpunit_schedule_empty_cat_cleanup() {
    if (!wp_next_scheduled('wpunit_empty_cat_cleanup_hook')) {
        wp_schedule_event(time(), 'weekly', 'wpunit_empty_cat_cleanup_hook');
    }
}

add_action('wpunit_empty_cat_cleanup_hook', 'wpunit_delete_empty_categories');
add_action('init', 'wpunit_schedule_empty_cat_cleanup');

Этот код регистрирует событие, которое каждую неделю запускает функцию удаления пустых категорий.

Как остановить автоматизацию при необходимости

Если потребуется отключить задачу, достаточно вызвать:

wp_clear_scheduled_hook('wpunit_empty_cat_cleanup_hook');

Это остановит запланированные вызовы и сохранит текущие категории в целости.

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

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

  • Clearfy Pro — оптимизационный плагин, который умеет выявлять и удалять мусорные категории и таксономии.
  • WPRemark — позволяет анализировать структуру сайта и быстро удалять неиспользуемые категории.

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

Удаление категорий с учётом связанных данных и SEO

Прежде чем удалять категорию, важно убедиться, что:

  • Нет связанных записей или они переназначены на другую категорию.
  • Удаление не приведёт к «битым» ссылкам или ошибкам 404.
  • Настроены редиректы с удалённых категорий, если они индексировались поисковиками.

Для переназначения постов из удаляемой категории можно использовать следующий код:

function wpunit_reassign_posts_before_cat_delete($old_cat_id, $new_cat_id = 1) {
    $posts = get_posts(array(
        'category' => $old_cat_id,
        'numberposts' => -1
    ));
    foreach ($posts as $post) {
        wp_set_post_categories($post->ID, array($new_cat_id), true);
    }
}

Эта функция переносит все записи из удаляемой категории в категорию с ID 1 (обычно «Без рубрики»). Вы можете изменить ID на нужный.

Выводы и рекомендации по автоматизации

Автоматическое удаление старых категорий — важный этап оптимизации структуры WordPress-сайта. Для этого можно:

  • Использовать кастомный код с планировщиком задач WP-Cron (WPUnit Schedule Event).
  • Подключать проверенные плагины, например, Clearfy Pro.
  • Обязательно обрабатывать посты из удаляемых категорий, чтобы избежать ошибок.

Регулярная чистка категорий поддержит актуальность сайта и улучшит его производительность.

Как создать автоматический импорт из Telegram в WordPress с помощью WPUnit
26.03.2026
Оптимальное использование хуков для отложенного запуска кода в WordPress
21.05.2026
Как отключить перезагрузку страницы при отправке формы в WordPress
22.02.2026
Как удалить неиспользуемые атрибуты и метаданные из WooCommerce
13.05.2026
Автоматическое удаление старых ревизий постов в WordPress для оптимизации базы данных
23.12.2025