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

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

Зачем удалять пустые термины в WordPress?

Пустые термины — это записи таксономий, которые не содержат ни одной записи (поста, страницы или кастомного типа записи). Они могут появляться при удалении контента, миграциях или массовом редактировании. Вот почему стоит удалять такие термины:

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

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

Как найти пустые термины в WordPress: SQL-запрос и WP функции

Сначала нужно определить, какие термины пустые. Для этого можно использовать SQL-запрос к базе данных:

SELECT t.term_id, t.name, tt.taxonomy FROM wp_terms AS t
LEFT JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id
WHERE tt.count = 0;

Поле count в таблице wp_term_taxonomy хранит количество привязанных записей. Значение 0 означает пустой термин.

Но лучше работать через WordPress API — это безопаснее и переносимее. Вот пример функции для получения пустых терминов указанной таксономии:

function wpco_get_empty_terms($taxonomy = 'category') {
    $terms = get_terms(array(
        'taxonomy' => $taxonomy,
        'hide_empty' => true, // true — возвращает только непустые, меняем на false и фильтруем
        'fields' => 'all'
    ));

    $empty_terms = array_filter($terms, function($term) {
        return $term->count === 0;
    });

    return $empty_terms;
}

Эта функция возвращает массив пустых терминов для дальнейшей обработки.

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

Удаление термина — это вызов функции wp_delete_term(). Совместим это с предыдущей функцией:

function wpco_delete_empty_terms($taxonomy = 'category') {
    $empty_terms = wpco_get_empty_terms($taxonomy);
    foreach ($empty_terms as $term) {
        $deleted = wp_delete_term($term->term_id, $taxonomy);
        if (is_wp_error($deleted)) {
            error_log('Ошибка удаления термина ID ' . $term->term_id . ': ' . $deleted->get_error_message());
        }
    }
}

// Пример вызова для категории и меток
wpco_delete_empty_terms('category');
wpco_delete_empty_terms('post_tag');

Рекомендуется запускать такую очистку через cron-задачи или вручную с проверкой.

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

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

function wpco_delete_empty_terms_all_taxonomies() {
    $taxonomies = get_taxonomies(array(), 'names');
    foreach ($taxonomies as $taxonomy) {
        wpco_delete_empty_terms($taxonomy);
    }
}

// Например, запуск
wpco_delete_empty_terms_all_taxonomies();

Это удалит все пустые термины во всех таксономиях WordPress.

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

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

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

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

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

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

function wpco_schedule_empty_terms_cleanup() {
    if (!wp_next_scheduled('wpco_empty_terms_cleanup_event')) {
        wp_schedule_event(time(), 'daily', 'wpco_empty_terms_cleanup_event');
    }
}
add_action('wp', 'wpco_schedule_empty_terms_cleanup');

add_action('wpco_empty_terms_cleanup_event', 'wpco_delete_empty_terms_all_taxonomies');

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

Особенности и потенциальные проблемы при удалении пустых терминов

Несмотря на кажущуюся простоту, удаление пустых терминов может вызвать нюансы:

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

Рекомендуется тщательно тестировать на резервной копии сайта.

Выводы

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

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

Как сделать защиту от спама в комментариях WordPress
14.11.2025
Как создать собственный тип записи в WordPress: подробное руководство с примерами
29.11.2025
Как создать динамические счетчики посещений в WordPress
19.03.2026
Как правильно создать и использовать Metabox в WordPress
22.11.2025
Как автоматизировать удаление старого контента в WordPress
08.02.2026