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

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

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

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

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

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

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

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

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

Пример функции, которая возвращает список пустых терминов для заданной таксономии:

function wpassist_get_empty_terms($taxonomy) {
    $args = [
        'taxonomy' => $taxonomy,
        'hide_empty' => true, // Показывать только с записями
        'fields' => 'ids',
        'count' => false,
    ];

    // Получаем все термины таксономии
    $all_terms = get_terms([ 'taxonomy' => $taxonomy, 'hide_empty' => false ]);
    $empty_terms = [];

    foreach ($all_terms as $term) {
        if ($term->count === 0) {
            $empty_terms[] = $term;
        }
    }

    return $empty_terms;
}

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

Автоматическое удаление пустых терминов с помощью PHP и WP-CLI

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

function wpassist_delete_empty_terms($taxonomy) {
    $empty_terms = wpassist_get_empty_terms($taxonomy);
    foreach ($empty_terms as $term) {
        wp_delete_term($term->term_id, $taxonomy);
    }
}

// Пример вызова
wpassist_delete_empty_terms('category');

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

Если у вас есть доступ к серверу, удобным вариантом будет использование WP-CLI. Команда для удаления пустых терминов (например, в категории) может выглядеть так:

wp term list category --field=term_id --format=csv --hide_empty=false | \
while IFS= read -r term_id; do
  count=$(wp term get category $term_id --field=count)
  if [ "$count" -eq 0 ]; then
    wp term delete category $term_id
  fi
done

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

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

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

  • Term Management Tools — добавляет функции для массового удаления, в том числе пустых терминов.
  • WP Sweep — универсальный плагин для очистки базы данных, включая удаление неиспользуемых терминов.
  • Clearfy Pro — мощный инструмент оптимизации WordPress, который среди прочих функций позволяет управлять таксономиями и удалять пустые термины. Подробнее на wpshop.ru.

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

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

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

  • Правильное удаление записей: при удалении постов тщательно проверяйте, не остаются ли «зависшие» термины.
  • Использование хуков: можно автоматизировать очистку с помощью хука delete_post или при сохранении записи, чтобы проверять и удалять пустые термины.
  • Контроль импорта: при массовом импорте следите, чтобы не создавались термины без записей.

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

add_action('delete_post', function($post_id) {
    $taxonomies = get_object_taxonomies(get_post_type($post_id));
    foreach ($taxonomies as $taxonomy) {
        wpassist_delete_empty_terms($taxonomy);
    }
});

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

Заключение по оптимизации таксономий в WordPress

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

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

Как настроить автоматическое сохранение данных в формах WordPress
25.01.2026
Как изменить вывод количества товаров в корзине WooCommerce
23.11.2025
Как создать и использовать кастомные статусы записей в WordPress
16.11.2025
Как удалить пустые записи в WordPress из базы данных
31.01.2026
Как создать автономную систему комментирования в WordPress с AJAX
16.04.2026