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

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

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

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

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

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

Как найти неиспользуемые термины с помощью SQL-запроса

Для начала полезно получить список терминов с нулевой связью. Вот пример запроса для стандартной таксономии category:

SELECT t.term_id, t.name FROM wp_terms t
INNER JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'category' AND tt.count = 0;

Если у вас кастомная таксономия, замените 'category' на её название. Этот запрос покажет все категории без постов.

На основе этого результата можно принимать решение об удалении.

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

Автоматизируем процесс удаления с помощью кода. Ниже функция wpone_delete_unused_terms удаляет все термины указанной таксономии с нулевым счетчиком:

function wpone_delete_unused_terms($taxonomy = 'category') {
    if (!taxonomy_exists($taxonomy)) {
        return new WP_Error('invalid_taxonomy', 'Таксономия не найдена');
    }

    $terms = get_terms(array(
        'taxonomy' => $taxonomy,
        'hide_empty' => true,
    ));

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

    $deleted_count = 0;

    foreach ($all_terms as $term) {
        if ($term->count == 0) {
            wp_delete_term($term->term_id, $taxonomy);
            $deleted_count++;
        }
    }

    return $deleted_count;
}

// Пример вызова
$deleted = wpone_delete_unused_terms('category');
echo "Удалено терминов: " . $deleted; // Выведет количество удалённых терминов

Обратите внимание, что функция проверяет наличие таксономии, получает все термины и удаляет только те, у которых счетчик равен 0.

Особенности безопасности и бэкапа

Перед удалением всегда делайте резервную копию базы данных! Удаление терминов необратимо из интерфейса.

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

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

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

  • Term Management Tools — расширяет возможности управления терминами, включая массовое удаление.
  • WP Sweep — очищает базу данных от мусора, в том числе неиспользуемых терминов.
  • Advanced Database Cleaner — инструмент для очистки и оптимизации БД, включая таксономии.

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

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

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

add_action('wpone_delete_unused_terms_cron', 'wpone_delete_unused_terms_cron_handler');

function wpone_delete_unused_terms_cron_handler() {
    // Очистка категории
    wpone_delete_unused_terms('category');
    // Очистка кастомной таксономии
    wpone_delete_unused_terms('my_custom_taxonomy');
}

// Регистрация задачи при активации плагина или темы
if (!wp_next_scheduled('wpone_delete_unused_terms_cron')) {
    wp_schedule_event(time(), 'daily', 'wpone_delete_unused_terms_cron');
}

// При деактивации отменяем задачу
register_deactivation_hook(__FILE__, function() {
    $timestamp = wp_next_scheduled('wpone_delete_unused_terms_cron');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpone_delete_unused_terms_cron');
    }
});

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

Как избежать повторного появления неиспользуемых терминов

Удаление — это только часть решения. Чтобы не создавать новые пустые термины, соблюдайте правила:

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

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

Выводы и полезные ссылки

Удаление неиспользуемых терминов таксономий — важная задача для оптимизации WordPress-сайта. Это ускоряет работу, облегчает управление и поддерживает чистоту базы данных. Используйте как SQL-запросы, так и PHP-функции, а также проверенные плагины для автоматизации процесса.

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

Также изучите документацию по функциям get_terms() и wp_delete_term() на официальном сайте WordPress для расширения возможностей.

Как создать многоуровневое меню в WordPress с подменю
01.03.2026
Автоматическое удаление ревизий постов в WordPress: практическое руководство
12.03.2026
Как создать автоматический резервный копировщик в WordPress без плагинов
30.03.2026
Как создать собственный блок для Gutenberg в WordPress
16.01.2026
Как избежать конфликтов между плагинами в WordPress
13.02.2026