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

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

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

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

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

  • Удаление записей без очистки терминов
  • Импорт/экспорт данных с ошибками
  • Автоматическое создание терминов плагинами или темами

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

Как найти пустые термины в WordPress вручную

В админке WordPress не предусмотрена встроенная функция фильтрации терминов по количеству связанных с ними записей. Но вы можете увидеть количество записей в списке терминов. Те, у которых указано 0, и есть пустые.

Однако, если терминов много, вручную искать неудобно. Для автоматизации лучше использовать код.

Удаление пустых терминов через код: пример функции

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

function wpbloger_delete_empty_terms($taxonomy = 'category') {
    if (!taxonomy_exists($taxonomy)) {
        return 'Таксономия не найдена';
    }
    $empty_terms = get_terms([
        'taxonomy' => $taxonomy,
        'hide_empty' => false,
        'fields' => 'ids',
    ]);

    $deleted = 0;
    foreach ($empty_terms as $term_id) {
        $term = get_term($term_id, $taxonomy);
        if ($term && $term->count === 0) {
            wp_delete_term($term_id, $taxonomy);
            $deleted++;
        }
    }

    return "Удалено пустых терминов в таксономии {$taxonomy}: {$deleted}";
}

// Пример вызова функции
add_action('admin_init', function() {
    if (current_user_can('manage_options') && isset($_GET['delete_empty_terms'])) {
        echo wpbloger_delete_empty_terms('category');
    }
});

Вы можете добавить этот код в файл functions.php вашей темы или создать отдельный плагин. После добавления, вызовите удаление, перейдя в админку по ссылке типа https://ваш-сайт/wp-admin/?delete_empty_terms=1.

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

Можно настроить автоматическое удаление пустых терминов при публикации или обновлении записи, чтобы база данных не загрязнялась. Пример:

add_action('save_post', function($post_id) {
    if (wp_is_post_revision($post_id)) {
        return;
    }
    wpbloger_delete_empty_terms('post_tag');
});

В этом примере мы очищаем пустые метки при сохранении любой записи.

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

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

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

Использование плагинов удобно для тех, кто не хочет погружаться в код.

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

Удаление терминов напрямую влияет на структуру сайта и ссылки на категории или метки. Перед удалением:

  • Создайте резервную копию базы данных
  • Проверяйте, что термины действительно пустые
  • Тестируйте функции на тестовом сайте

Так вы защитите сайт от потери данных и ошибок.

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

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

function wpbloger_delete_empty_terms_all_taxonomies() {
    $taxonomies = get_taxonomies(['public' => true], 'names');
    foreach ($taxonomies as $taxonomy) {
        wpbloger_delete_empty_terms($taxonomy);
    }
}

Эту функцию можно запускать по расписанию через WP-Cron или вручную.

Оптимизация загрузки картинок в WordPress: практические методы
26.11.2025
Как избежать конфликтов плагинов в WordPress: практические решения и примеры кода
09.12.2025
Как использовать фильтр YITH WooCommerce Wishlist для добавления собственных критериев
16.01.2026
Автоматическое удаление спама в комментариях WordPress
15.12.2025
Как создать собственный виджет WordPress: пошаговое руководство
20.11.2025