Пустые термины в таксономиях WordPress — это категории, метки или кастомные термины, к которым не привязаны записи. Они могут накапливаться с течением времени, особенно при активной работе с сайтом и изменении его структуры. Такие термины не несут пользы и могут замусоривать админку, а также влиять на производительность при большом количестве данных.
Что такое пустые термины в WordPress и зачем их удалять
Пустой термин — это термин таксономии, у которого количество связанных записей равно нулю (count = 0). Например, категория, в которую не назначена ни одна запись, или метка, которая не используется.
Причины появления пустых терминов:
- Удаление записей без очистки терминов.
- Импорт и экспорт контента с изменениями в таксономиях.
- Ошибки автоматических процессов или плагинов.
Удаление таких терминов помогает:
- Сделать базу данных чище и уменьшить размер таблиц.
- Улучшить навигацию и работу с таксономиями в админке.
- Оптимизировать запросы, особенно если на сайте много таксономий и терминов.
Как найти пустые термины в WordPress: использование WP_Term_Query
Для начала нужно получить список пустых терминов. Сделать это можно через класс WP_Term_Query, указав параметр 'hide_empty' => true или false, но нам нужен именно фильтр на пустые.
Пример функции, которая возвращает пустые термины для заданной таксономии:
function wpassist_get_empty_terms($taxonomy = 'category') {
$args = [
'taxonomy' => $taxonomy,
'hide_empty' => false,
];
$terms = get_terms($args);
$empty_terms = [];
foreach ($terms as $term) {
if ($term->count === 0) {
$empty_terms[] = $term;
}
}
return $empty_terms;
}
Эту функцию можно использовать для получения пустых категорий, меток или кастомных терминов.
Удаление пустых терминов программно
Для удаления терминов в WordPress используется функция wp_delete_term. Чтобы удалить все пустые термины, можно написать функцию, которая перебирает их и удаляет:
function wpassist_delete_empty_terms($taxonomy = 'category') {
$empty_terms = wpassist_get_empty_terms($taxonomy);
$deleted = 0;
foreach ($empty_terms as $term) {
$result = wp_delete_term($term->term_id, $taxonomy);
if (!is_wp_error($result)) {
$deleted++;
}
}
return $deleted;
}
Пример вызова:
$count_deleted = wpassist_delete_empty_terms('category');
echo "Удалено пустых категорий: " . $count_deleted;
Такой подход можно использовать для любых таксономий, например, 'post_tag' или кастомных.
Опасности и рекомендации
Перед массовым удалением терминов рекомендуется сделать бэкап базы данных. Удаление терминов необратимо через админку.
Также учитывайте, что если термин связан с другими сущностями (например, в плагинах), удаление может нарушить их работу.
Использование WP-CLI для удаления пустых терминов
WP-CLI — мощный инструмент для управления WordPress из командной строки. Для удаления пустых терминов можно написать собственный скрипт или использовать готовые команды.
Пример команды для вывода пустых терминов:
wp term list category --hide-empty=false --format=json | jq '.[] | select(.count == 0)'
Для удаления пустых терминов можно написать bash-скрипт, который переберёт такие термины и удалит их:
wp term list category --hide-empty=false --format=ids | xargs -n1 -I % sh -c '
count=$(wp term get % category --field=count);
if [ "$count" -eq 0 ]; then
wp term delete category %;
fi
'
WP-CLI позволяет автоматизировать эти процессы и запускать их регулярно через cron.
Автоматизация удаления пустых терминов с помощью WP-Cron
Чтобы не заниматься ручной очисткой, можно настроить автоматический таск, который будет раз в сутки или неделю удалять пустые термины.
Пример кода для добавления задачи в WP-Cron:
// Хук активации плагина или темы
register_activation_hook(__FILE__, function() {
if (!wp_next_scheduled('wpassist_delete_empty_terms_cron')) {
wp_schedule_event(time(), 'daily', 'wpassist_delete_empty_terms_cron');
}
});
// Хук деактивации
register_deactivation_hook(__FILE__, function() {
wp_clear_scheduled_hook('wpassist_delete_empty_terms_cron');
});
// Функция-обработчик
add_action('wpassist_delete_empty_terms_cron', function() {
wpassist_delete_empty_terms('category');
wpassist_delete_empty_terms('post_tag');
});
Такой подход позволяет поддерживать базу данных в порядке без дополнительного участия администратора.
Использование плагинов для очистки таксономий
Если вы предпочитаете готовые решения, обратите внимание на плагины, которые помогают управлять таксономиями и удалять неиспользуемые термины:
- Term Cleaner — плагин для поиска и удаления пустых терминов.
- Clearfy Pro — комплексный инструмент оптимизации, в том числе с функциями управления таксономиями.
Эти плагины позволяют делать очистку вручную или по расписанию с минимальными знаниями кода.
Как проверить результат и убедиться в безопасности
После удаления пустых терминов проверьте админку в разделе «Рубрики» или «Метки». Пустые элементы должны исчезнуть.
Рекомендуется также протестировать работу сайта, особенно если используются кастомные таксономии и сложные связи с другими плагинами.
В случае проблем всегда можно восстановить базу из резервной копии.
Выводы
Удаление пустых терминов — важная задача для поддержания чистоты и производительности сайта на WordPress. С помощью простого кода, WP-CLI и автоматизации через WP-Cron вы можете легко избавиться от ненужного мусора в таксономиях.
Используйте готовые решения из WPShop для более удобного управления и оптимизации.