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

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

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

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

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

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

Пустыми считаются те термины, у которых нет связанных записей (post_count = 0). Можно получить список таких терминов с помощью функции get_terms() с параметром 'hide_empty' => true для обратного эффекта, но нам нужны именно пустые, поэтому используем 'hide_empty' => false и фильтруем по count.

function wpelement_get_empty_terms($taxonomy = 'category') {
    $terms = get_terms(array(
        'taxonomy' => $taxonomy,
        'hide_empty' => false,
    ));
    $empty_terms = array();
    foreach ($terms as $term) {
        if ($term->count === 0) {
            $empty_terms[] = $term;
        }
    }
    return $empty_terms;
}

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

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

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

function wpelement_delete_empty_terms($taxonomy = 'category') {
    $empty_terms = wpelement_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());
        }
    }
}

Можно вызвать функцию wpelement_delete_empty_terms('category'); для удаления пустых категорий или заменить 'category' на другую таксономию, например, post_tag или пользовательскую.

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

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

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

add_action('wpelement_cleanup_empty_terms_hook', 'wpelement_cleanup_empty_terms_callback');

function wpelement_cleanup_empty_terms_callback() {
    $taxonomies = get_taxonomies(array('public' => true));
    foreach ($taxonomies as $taxonomy) {
        wpelement_delete_empty_terms($taxonomy);
    }
}

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

Советы и рекомендации

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

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

Если у вас есть таксономия, например, product_cat для WooCommerce или другой, то код аналогичен:

function wpelement_delete_empty_product_cats() {
    wpelement_delete_empty_terms('product_cat');
}

// Вызов функции вручную или через крон
wpelement_delete_empty_product_cats();

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

Итоги

Удаление пустых терминов таксономий — важная задача для поддержания порядка и оптимизации WordPress. Используя функции get_terms() и wp_delete_term(), вы легко можете автоматизировать этот процесс и избежать накопления мусора в базе. Включение регулярной очистки через WP-Cron сделает процесс полностью автономным.

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

Как добавить поддержку WebP в WordPress без плагинов
25.02.2026
Массовое удаление и изменение атрибутов товаров в WooCommerce: практическое руководство
21.05.2026
Как удалить неактивных пользователей в WordPress: эффективные методы и примеры
19.11.2025
Автоматический импорт данных из внешнего API в WordPress
02.04.2026
Как автоматически отключить отзывы на отдельных страницах WooCommerce
15.05.2026