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

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

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

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

Удаление таких таксономий помогает:

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

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

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

Чтобы найти неиспользуемые таксономии, нужно проверить, есть ли у них связанные объекты (посты, страницы и кастомные типы записей). Таксономия считается неиспользуемой, если количество связанных с ней терминов равно нулю или термины не прикреплены к никаким постам.

Вот простой подход для проверки:

  • Получить список всех зарегистрированных таксономий с помощью get_taxonomies().
  • Для каждой таксономии получить список терминов через get_terms() с параметром 'hide_empty' => false.
  • Для каждого термина проверить количество связанных с ним постов — поле count.

Если у таксономии нет терминов или все термины не связаны ни с одним постом, значит таксономия не используется.

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

function wptask_get_unused_taxonomies() {
    $unused = [];
    $taxonomies = get_taxonomies([], 'objects');

    foreach ($taxonomies as $taxonomy) {
        // Пропускаем системные таксономии
        if (in_array($taxonomy->name, ['post_tag', 'category', 'nav_menu', 'link_category', 'post_format'])) {
            continue;
        }

        $terms = get_terms([
            'taxonomy' => $taxonomy->name,
            'hide_empty' => false,
        ]);

        if (!$terms || is_wp_error($terms)) {
            // Если терминов нет, считаем таксономию неиспользуемой
            $unused[] = $taxonomy->name;
            continue;
        }

        $has_used_terms = false;
        foreach ($terms as $term) {
            if ($term->count > 0) {
                $has_used_terms = true;
                break;
            }
        }

        if (!$has_used_terms) {
            $unused[] = $taxonomy->name;
        }
    }

    return $unused;
}

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

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

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

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

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

function wptask_delete_taxonomy_terms($taxonomy) {
    $terms = get_terms([
        'taxonomy' => $taxonomy,
        'hide_empty' => false,
    ]);

    if (is_wp_error($terms) || empty($terms)) {
        return;
    }

    foreach ($terms as $term) {
        wp_delete_term($term->term_id, $taxonomy);
    }
}

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

$unused_taxonomies = wptask_get_unused_taxonomies();
foreach ($unused_taxonomies as $tax) {
    wptask_delete_taxonomy_terms($tax);
    // Дополнительно можно добавить логику для отключения регистрации таксономии
}

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

Реализация автоматизации: запуск по расписанию

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

Пример добавления задачи в WP-Cron

add_action('wptask_cleanup_unused_taxonomies_hook', 'wptask_cleanup_unused_taxonomies');

function wptask_cleanup_unused_taxonomies() {
    $unused_taxonomies = wptask_get_unused_taxonomies();
    foreach ($unused_taxonomies as $tax) {
        wptask_delete_taxonomy_terms($tax);
    }
}

// Регистрируем событие при активации темы/плагина
function wptask_schedule_cleanup() {
    if (!wp_next_scheduled('wptask_cleanup_unused_taxonomies_hook')) {
        wp_schedule_event(time(), 'weekly', 'wptask_cleanup_unused_taxonomies_hook');
    }
}
add_action('wp', 'wptask_schedule_cleanup');

// Убираем событие при деактивации
function wptask_clear_schedule() {
    $timestamp = wp_next_scheduled('wptask_cleanup_unused_taxonomies_hook');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wptask_cleanup_unused_taxonomies_hook');
    }
}
register_deactivation_hook(__FILE__, 'wptask_clear_schedule');

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

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

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

  • Clearfy Pro — мощный плагин для оптимизации WordPress, который помогает удалять лишние данные и оптимизировать таксономии. Подробнее на wpshop.ru/clearfy-pro.
  • WP-Optimize — популярный плагин для очистки базы данных, который может помочь с удалением ненужных таксономий и терминов.

Выбор плагина зависит от ваших задач и уровня владения WordPress.

Рекомендации и предосторожности

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

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

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

Автоматическое удаление неиспользуемых плагинов в WordPress: практическое руководство
15.02.2026
WooCommerce: как автоматически удалять неоплаченные заказы через cron и код
26.05.2026
Оптимизация базы данных WordPress: удаляем избыточные данные и ускоряем сайт
26.11.2025
Автоматическое отключение неиспользуемых шорткодов в WordPress
14.04.2026
Как создать собственный shortcode в WordPress с примером кода
05.11.2025