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

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

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

Пустой термин — это термин таксономии, у которого количество связанных записей равно нулю (count = 0). Например, категория, в которую не назначена ни одна запись, или метка, которая не используется.

Причины появления пустых терминов:

  • Удаление записей без очистки терминов.
  • Импорт и экспорт контента с изменениями в таксономиях.
  • Ошибки автоматических процессов или плагинов.

Удаление таких терминов помогает:

  • Сделать базу данных чище и уменьшить размер таблиц.
  • Улучшить навигацию и работу с таксономиями в админке.
  • Оптимизировать запросы, особенно если на сайте много таксономий и терминов.

Как найти пустые термины в WordPress: использование WP_Term_Query

Для начала нужно получить список пустых терминов. Сделать это можно через класс WP_Term_Query, указав параметр 'hide_empty' => true или false, но нам нужен именно фильтр на пустые.

Пример функции, которая возвращает пустые термины для заданной таксономии:

function wpassist_get_empty_terms($taxonomy = 'category') {
    $args = [
        'taxonomy' => $taxonomy,
        'hide_empty' => false,
    ];
    $terms = get_terms($args);
    $empty_terms = [];

    foreach ($terms as $term) {
        if ($term->count === 0) {
            $empty_terms[] = $term;
        }
    }

    return $empty_terms;
}

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

Удаление пустых терминов программно

Для удаления терминов в WordPress используется функция wp_delete_term. Чтобы удалить все пустые термины, можно написать функцию, которая перебирает их и удаляет:

function wpassist_delete_empty_terms($taxonomy = 'category') {
    $empty_terms = wpassist_get_empty_terms($taxonomy);
    $deleted = 0;

    foreach ($empty_terms as $term) {
        $result = wp_delete_term($term->term_id, $taxonomy);
        if (!is_wp_error($result)) {
            $deleted++;
        }
    }
    return $deleted;
}

Пример вызова:

$count_deleted = wpassist_delete_empty_terms('category');
echo "Удалено пустых категорий: " . $count_deleted;

Такой подход можно использовать для любых таксономий, например, 'post_tag' или кастомных.

Опасности и рекомендации

Перед массовым удалением терминов рекомендуется сделать бэкап базы данных. Удаление терминов необратимо через админку.

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

Использование WP-CLI для удаления пустых терминов

WP-CLI — мощный инструмент для управления WordPress из командной строки. Для удаления пустых терминов можно написать собственный скрипт или использовать готовые команды.

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

wp term list category --hide-empty=false --format=json | jq '.[] | select(.count == 0)'

Для удаления пустых терминов можно написать bash-скрипт, который переберёт такие термины и удалит их:

wp term list category --hide-empty=false --format=ids | xargs -n1 -I % sh -c '
  count=$(wp term get % category --field=count);
  if [ "$count" -eq 0 ]; then
    wp term delete category %;
  fi
'

WP-CLI позволяет автоматизировать эти процессы и запускать их регулярно через cron.

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

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

Пример кода для добавления задачи в WP-Cron:

// Хук активации плагина или темы
register_activation_hook(__FILE__, function() {
    if (!wp_next_scheduled('wpassist_delete_empty_terms_cron')) {
        wp_schedule_event(time(), 'daily', 'wpassist_delete_empty_terms_cron');
    }
});

// Хук деактивации
register_deactivation_hook(__FILE__, function() {
    wp_clear_scheduled_hook('wpassist_delete_empty_terms_cron');
});

// Функция-обработчик
add_action('wpassist_delete_empty_terms_cron', function() {
    wpassist_delete_empty_terms('category');
    wpassist_delete_empty_terms('post_tag');
});

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

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

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

  • Term Cleaner — плагин для поиска и удаления пустых терминов.
  • Clearfy Pro — комплексный инструмент оптимизации, в том числе с функциями управления таксономиями.

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

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

После удаления пустых терминов проверьте админку в разделе «Рубрики» или «Метки». Пустые элементы должны исчезнуть.

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

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

Выводы

Удаление пустых терминов — важная задача для поддержания чистоты и производительности сайта на WordPress. С помощью простого кода, WP-CLI и автоматизации через WP-Cron вы можете легко избавиться от ненужного мусора в таксономиях.

Используйте готовые решения из WPShop для более удобного управления и оптимизации.

Как удалить кэш в WordPress правильно и быстро
02.12.2025
Как удалить пустые записи в WordPress из базы данных
31.01.2026
Как изменить URL текущей страницы в WordPress без перенаправления
27.02.2026
Как использовать WP-Cron для автоматизации задач в WordPress
03.05.2026
Как использовать hook pre_get_posts для фильтра записей в WordPress
09.12.2025