В WordPress со временем накапливаются категории, которые не содержат ни одного поста. Это не только создает беспорядок в админке, но и может негативно влиять на производительность и SEO. В этой статье разберем, как автоматически находить и удалять такие пустые категории, используя собственный код и плагины. Приведем практические примеры и советы для безопасной реализации.
Почему важно удалять пустые категории в WordPress
Пустые категории — это категории, в которых нет ни одного опубликованного поста. Их существование может привести к нескольким проблемам:
- Запутанность структуры сайта. Администраторы и редакторы видят ненужные категории, что усложняет управление контентом.
- Потеря SEO-потенциала. Пустые категории генерируют страницы без содержимого, что плохо воспринимается поисковыми системами.
- Негативное влияние на производительность. Хотя влияние минимально, лишние термины таксономий увеличивают нагрузку на базу данных.
Регулярное удаление пустых категорий помогает поддерживать чистоту и оптимальность WordPress-сайта.
Как найти пустые категории вручную
В админке WordPress можно быстро увидеть категории без постов. Для этого перейдите в меню Записи → Рубрики. Там у каждой категории отображается количество записей. Категории с нулевым числом — пустые.
Однако при большом количестве категорий это неудобно и требует автоматизации.
Автоматическое удаление пустых категорий с помощью кода
Для автоматизации процесса можно создать функцию, которая найдет категории с нулевым количеством постов и удалит их. Ниже пример такой функции для wp-code.ru, которую можно добавить в файл functions.php вашей темы или в собственный плагин.
function wpcode_remove_empty_categories() {
$args = array(
'taxonomy' => 'category',
'hide_empty' => true, // покажет только категории с постами
'fields' => 'ids',
);
// Получаем все категории
$all_cats = get_terms(array('taxonomy' => 'category', 'hide_empty' => false, 'fields' => 'ids'));
// Получаем категории с постами
$non_empty_cats = get_terms($args);
// Определяем пустые категории
$empty_cats = array_diff($all_cats, $non_empty_cats);
foreach ($empty_cats as $cat_id) {
wp_delete_term($cat_id, 'category');
}
}
// Запускаем функцию при активации плагина или вручную
// add_action('init', 'wpcode_remove_empty_categories');
Объяснение кода:
- Сначала получаем все категории, включая пустые.
- Затем получаем только категории с постами.
- Вычитаем непустые из всех — получаем пустые.
- Удаляем каждую пустую категорию с помощью
wp_delete_term.
Можно запускать эту функцию вручную или привязать к Cron для регулярного автоматического удаления.
Добавление Cron задачи для регулярного удаления
Чтобы запускать очистку автоматически, добавьте Cron задачу:
function wpcode_schedule_category_cleanup() {
if (!wp_next_scheduled('wpcode_daily_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wpcode_daily_cleanup_hook');
}
}
add_action('wp', 'wpcode_schedule_category_cleanup');
add_action('wpcode_daily_cleanup_hook', 'wpcode_remove_empty_categories');
Так функция будет запускаться раз в сутки, автоматически удаляя пустые категории.
Использование плагинов для удаления пустых категорий
Если вы не хотите использовать код, можно обратить внимание на следующие плагины, которые помогут управлять категориями:
- Term Management Tools — расширяет стандартный функционал управления терминами, включая массовое удаление.
- WP Bulk Delete — позволяет удалять посты, комментарии, термины по разным условиям, в том числе пустые категории.
Например, WP Bulk Delete позволяет настроить фильтр по таксономиям и удалить пустые категории удобным интерфейсом.
Особенности и предосторожности при удалении категорий
Перед автоматическим удалением нужно учесть несколько важных моментов:
- Резервное копирование. Обязательно делайте бэкап базы данных перед массовыми удалениями.
- Проверка условий. Возможно, некоторые категории временно пусты, но нужны в структуре.
- Переназначение постов. Если категория не пустая, но посты будут удалены или перемещены, убедитесь, что они не останутся без категории.
- Кеширование. Очистите кеш после удаления категорий, чтобы изменения отобразились на сайте.
Расширение функции: удаление неиспользуемых тегов и таксономий
Аналогично категории, можно расширить функционал для удаления пустых тегов или пользовательских таксономий. Пример для тегов:
function wpcode_remove_empty_tags() {
$all_tags = get_terms(array('taxonomy' => 'post_tag', 'hide_empty' => false, 'fields' => 'ids'));
$non_empty_tags = get_terms(array('taxonomy' => 'post_tag', 'hide_empty' => true, 'fields' => 'ids'));
$empty_tags = array_diff($all_tags, $non_empty_tags);
foreach ($empty_tags as $tag_id) {
wp_delete_term($tag_id, 'post_tag');
}
}
Так можно держать таксономии в порядке без лишних терминов.
Выводы
Автоматическое удаление пустых категорий в WordPress — важный шаг к поддержанию чистоты и оптимизации сайта. Используйте приведенный код и/или плагины, чтобы реализовать регулярную очистку. Не забывайте про бэкапы и тестирование на staging-среде. Такая практика поможет избежать накопления мусора и повысит удобство управления контентом.