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

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

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

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

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

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

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

Использование плагинов

Среди популярных плагинов для очистки таксономий от пустых терминов отмечу Term Cleanup. Он позволяет автоматически находить и удалять пустые термины в выбранных таксономиях. Плагин прост в настройке, но если вы хотите более гибкий контроль, лучше использовать код.

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

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

function wp_pro_remove_empty_terms($taxonomy = 'category') {
    $empty_terms = get_terms(array(
        'taxonomy' => $taxonomy,
        'hide_empty' => true,
        'fields' => 'ids'
    ));

    // Получаем все термины таксономии
    $all_terms = get_terms(array(
        'taxonomy' => $taxonomy,
        'hide_empty' => false,
        'fields' => 'ids'
    ));

    // Определяем пустые термины (те, что не в $empty_terms)
    $terms_to_delete = array_diff($all_terms, $empty_terms);

    foreach ($terms_to_delete as $term_id) {
        wp_delete_term($term_id, $taxonomy);
    }
}

// Пример вызова: удаляем пустые категории
add_action('init', function() {
    wp_pro_remove_empty_terms('category');
    wp_pro_remove_empty_terms('post_tag');
    // Для пользовательских таксономий замените 'custom_taxonomy'
    // wp_pro_remove_empty_terms('custom_taxonomy');
});

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

Как настроить автоматическую очистку по расписанию

Чтобы не запускать функцию вручную, можно настроить автоматический запуск через WP-Cron. Для этого добавим задачу, которая будет вызываться, например, раз в неделю.

function wp_pro_schedule_empty_terms_cleanup() {
    if (!wp_next_scheduled('wp_pro_empty_terms_cleanup_event')) {
        wp_schedule_event(time(), 'weekly', 'wp_pro_empty_terms_cleanup_event');
    }
}
add_action('wp', 'wp_pro_schedule_empty_terms_cleanup');

add_action('wp_pro_empty_terms_cleanup_event', function() {
    wp_pro_remove_empty_terms('category');
    wp_pro_remove_empty_terms('post_tag');
});

// Отключение задачи при деактивации плагина или темы
function wp_pro_clear_empty_terms_cleanup_schedule() {
    $timestamp = wp_next_scheduled('wp_pro_empty_terms_cleanup_event');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wp_pro_empty_terms_cleanup_event');
    }
}
register_deactivation_hook(__FILE__, 'wp_pro_clear_empty_terms_cleanup_schedule');

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

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

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

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

Заключение: поддержка чистоты таксономий для стабильной работы сайта

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

Если хотите расширить функционал, обратите внимание на плагины из WPSHOP.ru, которые могут помочь в оптимизации и управлении вашим сайтом на WordPress.

Автоматизация дублирования постов в WordPress с помощью хуков
27.02.2026
Как избежать фейковых отзывов на WordPress сайте
17.12.2025
Оптимизация базы данных WordPress: лучшие практики и решения
24.11.2025
Как использовать WP-Cron для автоматизации задач на сайте WordPress
05.03.2026
Автоматическое удаление спама в комментариях WordPress
19.01.2026