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

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

Что такое таксономии в WordPress и зачем их удалять

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

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

  • Сократить размер базы данных;
  • Улучшить производительность запросов;
  • Избавиться от путаницы в админке;
  • Сделать структуру сайта понятнее для редакторов.

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

Первый шаг — понять, какие таксономии не используются. Для этого можно выполнить SQL-запрос к базе данных или написать специальный PHP-скрипт.

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

Пример SQL-запроса для поиска таксономий без терминов

SELECT taxonomy FROM wp_term_taxonomy WHERE count = 0;

Этот запрос покажет таксономии, у которых нет связанных записей. Однако следует быть осторожным с системными таксономиями, такими как category и post_tag.

PHP-скрипт для проверки использования таксономий

function wpstuff_check_unused_taxonomies() {
    $taxonomies = get_taxonomies([], 'objects');
    $unused = [];
    foreach ($taxonomies as $taxonomy) {
        if ($taxonomy->name === 'category' || $taxonomy->name === 'post_tag') {
            continue; // пропускаем системные таксономии
        }
        $terms = get_terms(['taxonomy' => $taxonomy->name, 'hide_empty' => false]);
        $used = false;
        foreach ($terms as $term) {
            if ($term->count > 0) {
                $used = true;
                break;
            }
        }
        if (!$used) {
            $unused[] = $taxonomy->name;
        }
    }
    return $unused;
}

Функция wpstuff_check_unused_taxonomies возвращает массив неиспользуемых таксономий, пропуская стандартные категории и метки.

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

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

1. Удаляем регистрацию таксономии

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

2. Удаляем термины и связи из базы

Для удаления данных используйте SQL-запросы. Внимание: перед работой с базой обязательно сделайте резервную копию!

DELETE tt, tr, t
FROM wp_terms t
LEFT JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
LEFT JOIN wp_term_relationships tr ON tt.term_taxonomy_id = tr.term_taxonomy_id
WHERE tt.taxonomy = 'название_таксономии';

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

3. Пример функции для удаления таксономии в WordPress с помощью PHP

function wpstuff_delete_taxonomy_data($taxonomy) {
    global $wpdb;
    // Получаем term_taxonomy_id для таксономии
    $term_taxonomies = $wpdb->get_col($wpdb->prepare(
        "SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy = %s",
        $taxonomy
    ));
    if (empty($term_taxonomies)) {
        return false; // Таксономия не найдена
    }
    // Удаляем связи с постами
    foreach ($term_taxonomies as $tt_id) {
        $wpdb->delete($wpdb->term_relationships, ['term_taxonomy_id' => $tt_id]);
    }
    // Удаляем таксономии
    $wpdb->delete($wpdb->term_taxonomy, ['taxonomy' => $taxonomy]);
    // Удаляем термины, которые больше не имеют связей
    $wpdb->query(
        "DELETE t FROM {$wpdb->terms} t LEFT JOIN {$wpdb->term_taxonomy} tt ON t.term_id = tt.term_id WHERE tt.term_id IS NULL"
    );
    return true;
}

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

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

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

Пример простой команды WP-CLI:

if (class_exists('WP_CLI')) {
    WP_CLI::add_command('wpstuff clean-taxonomies', function() {
        $unused = wpstuff_check_unused_taxonomies();
        if (empty($unused)) {
            WP_CLI::success('Неиспользуемые таксономии не найдены.');
            return;
        }
        foreach ($unused as $taxonomy) {
            wpstuff_delete_taxonomy_data($taxonomy);
            WP_CLI::log("Таксономия {$taxonomy} удалена.");
        }
        WP_CLI::success('Очистка завершена.');
    });
}

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

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

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

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

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

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

Перед любыми изменениями в базе данных обязательно делайте резервную копию с помощью плагинов (например, UpdraftPlus) или средствами хостинга. Ошибки при удалении таксономий могут привести к потере важных данных или нарушению работы сайта.

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

Как создать многоуровневую навигацию в WordPress с примерами кода
18.02.2026
Как избежать проблем с отключением AJAX в WooCommerce
21.02.2026
Как создать динамическую форму обработки данных в WordPress
16.01.2026
Как создать адаптивный шаблон WordPress с нуля
31.10.2025
Автоматическое создание резервных копий WordPress: лучшие плагины и примеры кода
10.03.2026