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

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

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

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

  • Увеличение размера базы данных и её замедление;
  • Загромождение административной панели и затруднение навигации по таксономиям;
  • Потенциальные конфликты с плагинами и темами при обработке таксономий;
  • Визуальный беспорядок в списках категорий и тегов на сайте.

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

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

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

Можно проверить список терминов с нулевым count и удалить их вручную через админку, но это неудобно при большом количестве.

Поэтому проще использовать SQL-запрос или код на PHP для поиска таких терминов.

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

SELECT * FROM wp_terms AS t
JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'category' AND tt.count = 0;

Аналогично можно менять taxonomy на нужную таксономию.

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

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

Пример функции wpupdate_delete_unused_terms()

function wpupdate_delete_unused_terms( $taxonomy = 'category' ) {
    $terms = get_terms(
        array(
            'taxonomy' => $taxonomy,
            'hide_empty' => true,
            'fields' => 'ids'
        )
    );

    $all_terms = get_terms(
        array(
            'taxonomy' => $taxonomy,
            'hide_empty' => false,
            'fields' => 'ids'
        )
    );

    $unused_terms = array_diff( $all_terms, $terms );

    foreach ( $unused_terms as $term_id ) {
        wp_delete_term( $term_id, $taxonomy );
    }

    return count($unused_terms);
}

// Пример вызова:
$deleted = wpupdate_delete_unused_terms('post_tag');
echo "Удалено неиспользуемых тегов: " . $deleted;

Данная функция:

  • Получает список всех терминов таксономии;
  • Получает список терминов, у которых есть записи (hide_empty = true);
  • Определяет разницу — неиспользуемые термины;
  • Удаляет их функцией wp_delete_term().

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

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

  • Clearfy Pro — содержит функции для оптимизации базы и удаления мусора, в том числе неиспользуемых терминов;
  • Term Management Tools — помогает управлять и удалять термины;
  • WP-Optimize — комплексная очистка базы данных, включая таксономии.

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

Особенности и предосторожности при удалении терминов

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

Если термин используется в пользовательских типах записей или таксономиях, проверьте, что у этих объектов нет связанных записей.

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

Расширение: как вывести список неиспользуемых терминов на странице админки

Для удобства можно добавить страницу в админ-панель, где будут перечислены все термины с count=0 и кнопка для их удаления.

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

add_action('admin_menu', function() {
    add_submenu_page(
        'tools.php',
        'Удаление неиспользуемых терминов',
        'Удаление терминов',
        'manage_options',
        'wpupdate-delete-unused-terms',
        'wpupdate_render_unused_terms_page'
    );
});

function wpupdate_render_unused_terms_page() {
    if ( isset($_POST['wpupdate_delete_terms']) ) {
        check_admin_referer('wpupdate_delete_terms_action');
        $deleted = wpupdate_delete_unused_terms('category');
        echo '<div class="updated notice"><p>Удалено ' . $deleted . ' неиспользуемых терминов категории.</p></div>';
    }

    $unused_terms = get_terms(array(
        'taxonomy' => 'category',
        'hide_empty' => false,
        'fields' => 'all'
    ));

    $unused_terms = array_filter($unused_terms, fn($term) => $term->count === 0);

    echo '<h1>Неиспользуемые термины категории</h1>';
    if (empty($unused_terms)) {
        echo '<p>Не найдено неиспользуемых терминов.</p>';
        return;
    }

    echo '<form method="post">';
    wp_nonce_field('wpupdate_delete_terms_action');
    echo '<table class="wp-list-table widefat fixed striped">';
    echo '<thead><tr><th>ID</th><th>Название</th><th>Slug</th></tr></thead><tbody>';
    foreach ($unused_terms as $term) {
        echo '<tr><td>' . esc_html($term->term_id) . '</td><td>' . esc_html($term->name) . '</td><td>' . esc_html($term->slug) . '</td></tr>';
    }
    echo '</tbody></table>';
    echo '<p><input type="submit" name="wpupdate_delete_terms" class="button button-primary" value="Удалить все неиспользуемые термины"></p>';
    echo '</form>';
}

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как добавить автозамену текста в WordPress простым кодом
04.04.2026
WooCommerce: решение проблем с подтверждением заказов и AJAX-обработкой
18.05.2026
Как добавить автоматическое удаление спама в комментариях WordPress
15.12.2025
Как автоматизировать удаление старых записей в WordPress по дате
31.03.2026
WooCommerce: как использовать хуки для изменения стоимости товара в корзине
25.05.2026
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙