Автоматическое удаление старых терминов в WordPress

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

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

Со временем многие категории и метки перестают быть актуальными: статьи удаляются, таксономии меняются, а старые термины остаются в базе. Это приводит к нескольким проблемам:

  • Увеличение размера базы данных — ненужные записи занимают место и замедляют запросы.
  • Сложности в администрировании — трудно ориентироваться в большом списке терминов.
  • Потенциальные ошибки — старые термины могут конфликтовать с новыми или влиять на отображение контента.

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

Как определить неиспользуемые термины

В WordPress термин считается неиспользуемым, если у него count равен нулю — то есть ни один пост не связан с этим термином. Можно проверить это через админку, но автоматизация процесса значительно удобнее.

Для выборки таких терминов используется функция get_terms() с параметром hide_empty:

$unused_terms = get_terms(array('taxonomy' => 'category', 'hide_empty' => true)); // вернёт только используемые термины

$empty_terms = get_terms(array('taxonomy' => 'category', 'hide_empty' => false)); // вернёт все термины

// Чтобы получить неиспользуемые, нужно отфильтровать по count = 0
$unused_terms = array_filter($empty_terms, function($term) {
    return $term->count == 0;
});

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

Автоматическое удаление неиспользуемых терминов с помощью WP-Cron

Для регулярного удаления терминов оптимально использовать систему планировщика задач WP-Cron. Это позволяет запускать очистку базы автоматически через заданные интервалы.

Создадим функцию wpgenerate_delete_unused_terms(), которая будет удалять все неиспользуемые термины в заданных таксономиях:

function wpgenerate_delete_unused_terms() {
    $taxonomies = array('category', 'post_tag'); // можно добавить свои таксономии

    foreach ($taxonomies as $taxonomy) {
        $terms = get_terms(array(
            'taxonomy' => $taxonomy,
            'hide_empty' => false,
        ));

        if (is_wp_error($terms)) {
            continue;
        }

        foreach ($terms as $term) {
            if ($term->count == 0) {
                wp_delete_term($term->term_id, $taxonomy);
            }
        }
    }
}

// Регистрация события в wp_cron
if (!wp_next_scheduled('wpgenerate_daily_delete_unused_terms')) {
    wp_schedule_event(time(), 'daily', 'wpgenerate_daily_delete_unused_terms');
}

add_action('wpgenerate_daily_delete_unused_terms', 'wpgenerate_delete_unused_terms');

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

Как отключить или изменить периодичность

Если нужно изменить интервал, можно заменить 'daily' на 'hourly', 'twicedaily' или создать свой интервал через фильтр cron_schedules. Чтобы отключить задачу, выполните в консоли или через плагин WP-CLI:

wp cron event delete wpgenerate_daily_delete_unused_terms
<

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

Если вы предпочитаете готовые решения, обратите внимание на плагины:

  • Term Management Tools — расширяет стандартные возможности работы с таксономиями, включая слияние и удаление терминов.
  • WP Bulk Delete — позволяет массово удалять записи, пользователей, а также термины по различным условиям, включая неиспользуемые.
  • Clearfy Pro — оптимизирует работу WordPress и содержит инструменты для очистки базы данных, включая удаление «мёртвых» терминов. Подробнее на wpshop.ru.

Использование плагинов упрощает задачу, но автоматизация через WP-Cron даёт больше гибкости и контроля.

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

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

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

Кроме того, можно добавить дополнительную логику, например, сохранять список удалённых терминов в отдельную таблицу или отправлять уведомления администратору.

Расширение функции удаления: пример с логированием

Для контроля процесса добавим логирование в файл wp-content/wpgenerate_delete_terms.log:

function wpgenerate_delete_unused_terms() {
    $taxonomies = array('category', 'post_tag');
    $log_file = WP_CONTENT_DIR . '/wpgenerate_delete_terms.log';

    foreach ($taxonomies as $taxonomy) {
        $terms = get_terms(array(
            'taxonomy' => $taxonomy,
            'hide_empty' => false,
        ));

        if (is_wp_error($terms)) {
            error_log("[wpgenerate] Ошибка запроса терминов для таксономии $taxonomy", 3, $log_file);
            continue;
        }

        foreach ($terms as $term) {
            if ($term->count == 0) {
                $result = wp_delete_term($term->term_id, $taxonomy);
                if (is_wp_error($result)) {
                    error_log("[wpgenerate] Не удалось удалить термин {$term->name} ({$term->term_id}) из $taxonomy: " . $result->get_error_message() . "\n", 3, $log_file);
                } else {
                    error_log("[wpgenerate] Удалён термин {$term->name} ({$term->term_id}) из $taxonomy\n", 3, $log_file);
                }
            }
        }
    }
}

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

Итог

Автоматическое удаление неиспользуемых терминов — важная часть оптимизации WordPress. Используя приведённые примеры с WP-Cron и фильтрацией терминов, вы сможете поддерживать базу данных в порядке и улучшить производительность сайта. При необходимости используйте готовые плагины, например, Clearfy Pro, для дополнительного удобства.

Как автоматически создавать контент на основе GPT в WordPress
07.01.2026
WooCommerce: автоматическое удаление неактивных пользователей по дате последнего заказа
29.05.2026
WooCommerce: автоматическое удаление неактивных пользователей по дате последнего заказа
06.06.2026
Как удалить или изменить автора постов в WordPress без плагинов
06.12.2025
Как создать динамический виджет в WordPress с использованием REST API
15.12.2025