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

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

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

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

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

Критерии для удаления категорий

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

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

В зависимости от целей сайта можно комбинировать эти правила.

Реализация автоматического удаления категорий с помощью кода WPLab

Для примера создадим функцию wplab_auto_delete_old_categories, которая будет удалять категории без записей и те, в которых не было новых записей более 6 месяцев.

function wplab_auto_delete_old_categories() {
    $taxonomy = 'category';
    $args = array(
        'taxonomy' => $taxonomy,
        'hide_empty' => false,
    );
    $categories = get_terms($args);

    if (empty($categories) || is_wp_error($categories)) {
        return;
    }

    $now = current_time('timestamp');
    $delete_count = 0;

    foreach ($categories as $category) {
        // Проверяем количество записей в категории
        if ($category->count == 0) {
            wp_delete_term($category->term_id, $taxonomy);
            $delete_count++;
            continue;
        }

        // Получаем дату последней записи в категории
        $last_post = new WP_Query(array(
            'cat' => $category->term_id,
            'posts_per_page' => 1,
            'orderby' => 'date',
            'order' => 'DESC',
            'fields' => 'ids',
        ));

        if ($last_post->have_posts()) {
            $post_date = get_the_date('U', $last_post->posts[0]);
            $diff = $now - $post_date;
            // Удаляем категорию, если с последнего поста прошло более 6 месяцев
            if ($diff > 6 * 30 * 24 * 60 * 60) {
                wp_delete_term($category->term_id, $taxonomy);
                $delete_count++;
            }
        }
    }

    if ($delete_count > 0) {
        error_log("WPLab: Удалено категорий: $delete_count");
    }
}

// Запускаем функцию через WP-Cron раз в день
if (!wp_next_scheduled('wplab_daily_category_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wplab_daily_category_cleanup');
}
add_action('wplab_daily_category_cleanup', 'wplab_auto_delete_old_categories');

Этот код выполняет следующие действия:

  • Получает все категории, включая пустые (hide_empty => false).
  • Удаляет категории без записей.
  • Для остальных категорий проверяет дату последней записи. Если с последнего поста прошло более 6 месяцев, категория удаляется.
  • Регистрирует задачу в WP-Cron, чтобы функция запускалась автоматически каждый день.

Как подключить и использовать код

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

  1. Создайте папку wplab-auto-category-cleanup в wp-content/plugins/.
  2. Создайте файл wplab-auto-category-cleanup.php с таким содержимым:
<?php
/**
 * Plugin Name: WPLab Auto Category Cleanup
 * Description: Автоматическое удаление старых и пустых категорий.
 * Version: 1.0
 * Author: WPLab
 */

// Вставьте сюда код функции wplab_auto_delete_old_categories и регистрацию WP-Cron

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

Альтернативные плагины для управления категориями

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

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

Но если нужен более гибкий и специфичный подход, лучше использовать кастомный код.

Советы по безопасности и резервному копированию

Перед внедрением автоматического удаления всегда делайте резервные копии базы данных. Удаление категорий — необратимая операция, и ошибка в коде может привести к потере данных. Для резервных копий удобно использовать плагин WPSHOP Backup или аналогичные решения.

Также рекомендуется тестировать код на локальной копии сайта или staging-сервере перед запуском на живом ресурсе.

Как изменить роли пользователей в WordPress без плагинов
09.01.2026
Как удалить автоматически созданные изображения в WordPress
31.12.2025
Как сделать автоматический отчет о проблемах WordPress с помощью кода и плагинов
24.02.2026
Ограничение количества попыток входа в WordPress для защиты сайта
03.12.2025
Пагинация для архива кастомного типа записей в WordPress
16.12.2025