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

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

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

В WordPress таксономии используются для группировки записей: категории, метки, пользовательские таксономии. Термины — это отдельные элементы в таксономии, например, конкретная категория или метка.

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

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

  • Оптимизация базы данных — уменьшается размер таблиц, ускоряется выполнение запросов.
  • Упрощение администрирования — в админке не показывается мусор, легче находить нужные термины.
  • Улучшение SEO — некоторые SEO-плагины учитывают количество терминов, пустые могут создавать дубли или бесполезные страницы.

Как найти пустые термины в таксономиях WordPress

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

Пример запроса на PHP с использованием WP_Term_Query:

$args = [
    'taxonomy'   => 'category', // Замените на нужную таксономию
    'hide_empty' => true, // Вернёт только термины с записями
];
$terms_with_posts = get_terms($args);

$args_empty = [
    'taxonomy'   => 'category',
    'hide_empty' => false,
];
$all_terms = get_terms($args_empty);

$empty_terms = array_filter($all_terms, function($term) use ($terms_with_posts) {
    foreach ($terms_with_posts as $used_term) {
        if ($term->term_id === $used_term->term_id) {
            return false;
        }
    }
    return true;
});

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

Поиск пустых терминов через SQL-запрос

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

SELECT t.term_id, t.name, tt.taxonomy
FROM {$wpdb->terms} AS t
INNER JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id
WHERE tt.count = 0 AND tt.taxonomy = 'category';

Параметр tt.count показывает количество записей, связанных с термином. Если равно 0 — термин пустой.

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

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

function clearfy_delete_empty_terms($taxonomy = 'category') {
    $empty_terms = get_terms([
        'taxonomy' => $taxonomy,
        'hide_empty' => false,
        'count' => 0,
    ]);

    foreach ($empty_terms as $term) {
        $deleted = wp_delete_term($term->term_id, $taxonomy);
        if (is_wp_error($deleted)) {
            error_log('Clearfy: Ошибка при удалении термина ' . $term->name . ': ' . $deleted->get_error_message());
        } else {
            error_log('Clearfy: Удалён пустой термин ' . $term->name);
        }
    }
}

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

Автоматизация очистки пустых терминов

Для регулярной очистки пустых терминов удобно использовать WP-Cron. Добавим событие, которое будет запускать очистку раз в сутки:

function clearfy_schedule_empty_terms_cleanup() {
    if (!wp_next_scheduled('clearfy_daily_empty_terms_cleanup')) {
        wp_schedule_event(time(), 'daily', 'clearfy_daily_empty_terms_cleanup');
    }
}
add_action('wp', 'clearfy_schedule_empty_terms_cleanup');

function clearfy_do_empty_terms_cleanup() {
    clearfy_delete_empty_terms('category');
    // Можно добавить другие таксономии
}
add_action('clearfy_daily_empty_terms_cleanup', 'clearfy_do_empty_terms_cleanup');

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

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

Если вы не хотите писать код, можно использовать специализированные плагины. Например:

  • WP Bulk Delete — позволяет массово удалять термины по разным условиям, включая пустые.
  • Term Management Tools — расширяет возможности управления терминами, в том числе удаление и слияние.

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

Рекомендации по безопасности и работе с базой данных

Удаление терминов — операция, которая может повлиять на структуру контента. Поэтому придерживайтесь следующих рекомендаций:

  • Обязательно делайте резервную копию базы данных перед массовым удалением.
  • Проверяйте, что термин действительно пуст — у него count равен 0.
  • Тестируйте скрипты на локальном или тестовом сайте.
  • Если используете WP-Cron, убедитесь, что на сайте он работает корректно.

Заключение

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

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

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

⭐⭐⭐⭐⭐
Как удалить отзывы в WordPress через AJAX без рисков
18.02.2026
Как отключить AJAX в WordPress для ускорения сайта
09.12.2025
Как удалить или отключить Gutenberg в WordPress: практические решения
15.03.2026
Как удалить неиспользуемые таксономии в WordPress для оптимизации базы данных
18.12.2025
Как удалить неиспользуемые поля в формах WordPress для оптимизации и удобства
01.04.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее