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

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

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

Термином таксономии (taxonomy term) называют категорию, тег или любой кастомный термин, который присваивается записям в WordPress. Например, категория «Новости» или тег «SEO». Иногда после удаления или изменения контента некоторые термины перестают быть связаны с записями, то есть их count становится равен нулю.

Когда термины не удаляются, база данных содержит лишние записи, что:

  • Увеличивает размер таблиц wp_terms и wp_term_taxonomy;
  • Замедляет запросы, особенно при большом количестве терминов;
  • Создаёт путаницу в админке и при работе с API.

Удаление таких терминов – хорошая практика для оптимизации и чистоты данных.

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

Самый простой способ — проверить поле count в таблице wp_term_taxonomy. Это число показывает, сколько записей связано с данным термином. Если count равен нулю, термин не используется.

Для выборки всех неиспользуемых терминов можно использовать SQL-запрос:

SELECT term_id, taxonomy FROM wp_term_taxonomy WHERE count = 0;

Но лучше делать это в коде на PHP, чтобы безопасно удалить термины с помощью функций WordPress, которые корректно очищают все связи.

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

Ниже пример функции wpexpert_delete_unused_terms(), которую можно добавить в файл темы functions.php или в кастомный плагин. Она перебирает все таксономии, ищет термины с count = 0 и удаляет их.

function wpexpert_delete_unused_terms() {
    // Получаем все зарегистрированные таксономии
    $taxonomies = get_taxonomies( [], 'names' );

    foreach ( $taxonomies as $taxonomy ) {
        // Получаем термины с count = 0
        $terms = get_terms([
            'taxonomy' => $taxonomy,
            'hide_empty' => false,
            'count' => 0,
            'fields' => 'ids'
        ]);

        if ( !empty( $terms ) && !is_wp_error( $terms ) ) {
            foreach ( $terms as $term_id ) {
                // Удаляем термин
                wp_delete_term( $term_id, $taxonomy );
            }
        }
    }
}

Вызовите wpexpert_delete_unused_terms() один раз, например, через админ-панель, или временно добавьте вызов в functions.php для очистки.

Особенности и предупреждения

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

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

Иногда нужно почистить только одну таксономию, например, category или кастомную product_cat. Для этого функция упрощается:

function wpexpert_delete_unused_terms_for_taxonomy( $taxonomy ) {
    $terms = get_terms([
        'taxonomy' => $taxonomy,
        'hide_empty' => false,
        'count' => 0,
        'fields' => 'ids'
    ]);
    if ( !empty( $terms ) && !is_wp_error( $terms ) ) {
        foreach ( $terms as $term_id ) {
            wp_delete_term( $term_id, $taxonomy );
        }
    }
}

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

wpexpert_delete_unused_terms_for_taxonomy('category');

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

Автоматизация очистки через WP-CLI

Если у вас есть доступ к WP-CLI, можно автоматизировать удаление через консоль. WP-CLI позволяет выполнять PHP-код или писать собственные команды для работы с базой.

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

wp eval '
$taxonomies = get_taxonomies([], "names");
foreach ($taxonomies as $taxonomy) {
  $terms = get_terms([
    "taxonomy" => $taxonomy,
    "hide_empty" => false,
    "count" => 0,
    "fields" => "ids"
  ]);
  foreach ($terms as $term_id) {
    wp_delete_term($term_id, $taxonomy);
  }
}
'

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

Заключение: почему лучше не удалять термины через прямой SQL

Хотя можно удалять термины напрямую через SQL-запросы, например, через DELETE FROM wp_terms WHERE term_id=..., делать этого не рекомендуется. WordPress хранит связи в нескольких таблицах и вызывает хуки при удалении, чтобы очистить кэш и другие данные.

Используйте wp_delete_term() для безопасного и корректного удаления терминов. Это гарантирует, что база останется целой и работа сайта не нарушится.

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

Как отключить автоматическое создание незавершённых вариантов товаров в WooCommerce
27.07.2026
Как удалить верхний padding в WordPress без кода
19.01.2026
WooCommerce: как правильно автоматически изменять стоимость товаров после оплаты
23.06.2026
Как избежать проблем с несоответствием версий WordPress и PHP
19.02.2026
WooCommerce: решение проблемы со сбивающимся запросом на создание заказа
10.07.2026