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

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

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

Таксономии — это способ группировки записей, страниц и пользовательских типов записей (Custom Post Types) в WordPress. Стандартные таксономии — category и post_tag. Пользователи и разработчики могут создавать кастомные таксономии для более гибкой организации контента.

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

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

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

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

function wpclass_list_taxonomies_with_counts() {
    $taxonomies = get_taxonomies([], 'objects');
    echo '<table border="1" cellpadding="5">';
    echo '<tr><th>Таксономия</th><th>Метка</th><th>Количество терминов</th><th>Использование (число связанных записей)</th></tr>';
    foreach ($taxonomies as $taxonomy) {
        $terms = get_terms(['taxonomy' => $taxonomy->name, 'hide_empty' => false]);
        $term_count = count($terms);
        $used_terms = 0;
        foreach ($terms as $term) {
            if ($term->count > 0) {
                $used_terms++;
            }
        }
        echo '<tr>';
        echo '<td>' . esc_html($taxonomy->name) . '</td>';
        echo '<td>' . esc_html($taxonomy->label) . '</td>';
        echo '<td>' . $term_count . '</td>';
        echo '<td>' . $used_terms . '</td>';
        echo '</tr>';
    }
    echo '</table>';
}
add_shortcode('wpclass_taxonomies_list', 'wpclass_list_taxonomies_with_counts');

Этот код создаст шорткод [wpclass_taxonomies_list], который выведите на странице или в записи, чтобы увидеть список таксономий и статистику использования.

Обратите внимание на таксономии с нулевым значением в колонке «Использование». Они потенциально не используются.

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

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

1. Отключение регистрации таксономии

Если таксономия создаётся через плагин или тему, её регистрация происходит через функцию register_taxonomy. Чтобы отключить таксономию, можно отписаться от её регистрации с помощью фильтра registered_taxonomy или просто не подключать плагин/тему, которая её регистрирует.

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

function wpclass_unregister_taxonomy() {
    global $wp_taxonomies;
    if (isset($wp_taxonomies['neispolzuemaya_tax'])) {
        unset($wp_taxonomies['neispolzuemaya_tax']);
    }
}
add_action('init', 'wpclass_unregister_taxonomy', 100);

Замените neispolzuemaya_tax на название вашей таксономии.

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

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

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

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

DELETE tr, tt, t
FROM wp_terms AS t
INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id
INNER JOIN wp_term_relationships AS tr ON tt.term_taxonomy_id = tr.term_taxonomy_id
WHERE tt.taxonomy = 'neispolzuemaya_tax';

DELETE FROM wp_term_taxonomy WHERE taxonomy = 'neispolzuemaya_tax';

Обязательно сделайте резервную копию базы перед выполнением запросов!

3. Автоматизация удаления через код

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

function wpclass_delete_taxonomy_terms($taxonomy) {
    $terms = get_terms(array(
        'taxonomy' => $taxonomy,
        'hide_empty' => false,
    ));
    if (!empty($terms) && !is_wp_error($terms)) {
        foreach ($terms as $term) {
            wp_delete_term($term->term_id, $taxonomy);
        }
    }
    global $wpdb;
    $wpdb->delete($wpdb->term_taxonomy, ['taxonomy' => $taxonomy]);
}

// Пример вызова
// wpclass_delete_taxonomy_terms('neispolzuemaya_tax');

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

Для упрощения работы с таксономиями и оптимизации базы можно использовать специализированные плагины:

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

Все эти плагины можно найти и скачать на WPSHOP.

Как избежать появления неиспользуемых таксономий в будущем?

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

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

Выводы

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

Как отладить ошибки PHP в WordPress на живом сайте
23.01.2026
Как сделать отслеживание изменений в постах WordPress с помощью хуков
24.12.2025
Автоматическое создание резервных копий WordPress с помощью WPClass Cron
19.01.2026
Как создать плагин для автоматизации работы с изображениями в WordPress
02.12.2025
Как отключить WooCommerce Cart Fragments для улучшения производительности
03.05.2026