В процессе работы с WordPress накапливаются пустые термины — категории, теги и другие таксономии, которые не содержат ни одной записи. Они не только создают беспорядок в админке, но и могут негативно повлиять на SEO и работу сайта. В этой статье мы подробно разберём, как автоматически находить и удалять такие пустые термины, используя собственный код и плагины.
Почему важно удалять пустые термины в WordPress
Пустые термины — это категории или метки, которые не привязаны ни к одной записи. Причины их появления могут быть разные: удаление записей без очистки терминов, экспериментальные категории, которые так и не использовались, автоматическая синхронизация с внешними сервисами и т.д.
Основные проблемы пустых терминов:
- Загромождение базы данных и админки, усложнение навигации для редакторов.
- Потенциальное ухудшение SEO из-за индексации пустых страниц таксономий.
- Неправильная работа некоторых плагинов и тем, которые рассчитывают количество записей по терминам.
Автоматизация очистки помогает поддерживать порядок и экономит время.
Как найти пустые термины в WordPress: запросы и функции
Для поиска пустых терминов нам нужно проверить у каждого термина параметр count. Он показывает количество записей, связанных с этим термином. Если count равен нулю, термин пустой.
Пример функции, которая возвращает все пустые термины для заданной таксономии:
function wppremium_get_empty_terms($taxonomy = 'category') {
$empty_terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => true,
'fields' => 'ids',
));
// get_terms с hide_empty=true вернёт только термины с count > 0, поэтому ищем вручную
$all_terms = get_terms(array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
'fields' => 'all',
));
$empty_terms = array();
foreach ($all_terms as $term) {
if ($term->count == 0) {
$empty_terms[] = $term;
}
}
return $empty_terms;
}Здесь мы сначала получаем все термины без исключения пустых, затем фильтруем по count == 0.
Как автоматически удалять пустые термины: пример кода для functions.php
Удаление терминов в WordPress происходит с помощью функции wp_delete_term(). Ниже пример функции, которая удаляет все пустые категории:
function wppremium_delete_empty_terms($taxonomy = 'category') {
$empty_terms = wppremium_get_empty_terms($taxonomy);
foreach ($empty_terms as $term) {
wp_delete_term($term->term_id, $taxonomy);
}
}
// Для автоматического запуска, например, при активации темы или плагина
// add_action('after_setup_theme', function() {
// wppremium_delete_empty_terms('category');
// });Такой код можно запускать вручную или привязать к крон-задаче, чтобы очистка происходила автоматически по расписанию.
Добавление автоматической очистки через WP-Cron
Создадим задачу, которая будет запускаться раз в сутки:
function wppremium_schedule_empty_terms_cleanup() {
if (!wp_next_scheduled('wppremium_cleanup_empty_terms_hook')) {
wp_schedule_event(time(), 'daily', 'wppremium_cleanup_empty_terms_hook');
}
}
add_action('wp', 'wppremium_schedule_empty_terms_cleanup');
add_action('wppremium_cleanup_empty_terms_hook', function() {
wppremium_delete_empty_terms('category');
wppremium_delete_empty_terms('post_tag');
});Этот код регистрирует задачу, которая раз в день будет удалять пустые категории и теги.
Использование плагинов для удаления пустых терминов
Если не хочется писать код, можно воспользоваться плагинами:
- WP Clear Empty Terms — простой плагин, который позволяет удалять пустые термины вручную или по расписанию.
- Clearfy Pro (https://wpshop.ru/plugins/clearfy-pro/?utm_source=wppremium.ru&utm_medium=article&utm_campaign=kak-avtomaticheski-udaljat-pustye-terminy-v-wordpress) — мощный инструмент оптимизации WordPress, в том числе умеет обнаруживать и удалять пустые таксономии.
Эти решения подходят для тех, кто не хочет заниматься кодом, но важно понимать, что автоматизация через код даёт большую гибкость.
Особенности удаления терминов в кастомных таксономиях
Если у вас на сайте используются кастомные таксономии, например, «product_cat» для WooCommerce или свои собственные, методика та же, но важно указать правильное имя таксономии.
Например, для удаления пустых категорий продуктов WooCommerce:
wppremium_delete_empty_terms('product_cat');Однако будьте осторожны: если в вашей бизнес-логике пустые термины могут использоваться как заглушки или для других целей, автоматическое удаление может нарушить работу сайта.
Резюме и рекомендации
Автоматическая очистка пустых терминов — полезный способ поддерживать порядок и повышать качество сайта. Для этого можно использовать кастомный код, который проверяет и удаляет термины с нулевым количеством записей, либо установить специализированный плагин.
Рекомендуется:
- Регулярно проверять сайт на наличие пустых терминов.
- Настроить автоматическое удаление через WP-Cron с периодичностью 1 раз в день или неделю.
- Тестировать изменения на тестовом сайте, чтобы избежать случайного удаления нужных данных.
- Использовать Clearfy Pro для комплексной оптимизации сайта и автоматической очистки.
Таким образом, вы избавитесь от мусора в базе данных и улучшите производительность и SEO вашего WordPress-сайта.