В процессе работы с WordPress иногда накапливаются пустые категории — те, в которых нет ни одной записи. Они не только мешают навигации пользователей, но и могут негативно влиять на SEO вашего сайта. В этой статье разберёмся, как автоматически удалять такие категории с помощью кода и плагинов, чтобы поддерживать порядок без лишних усилий.
Почему важно удалять пустые категории в WordPress
Пустые категории не несут никакой пользы ни для посетителей, ни для поисковых систем. Они создают лишние страницы с пустым содержимым, что ухудшает пользовательский опыт и снижает общую оценку сайта поисковыми алгоритмами. Кроме того, большое количество ненужных категорий усложняет администрирование и навигацию.
Ручное удаление пустых категорий — возможный, но трудоёмкий процесс, особенно если категориями активно управляет команда или сайт большой. Автоматизация помогает экономить время и поддерживать чистоту таксономий.
Автоматическое удаление пустых категорий с помощью пользовательского кода
Создание функции для удаления пустых категорий
Добавим функцию в файл functions.php вашей темы, которая будет искать и удалять категории без постов. Используем WordPress API для работы с таксономиями.
function wptest_delete_empty_categories() {
$empty_cats = get_terms(array(
'taxonomy' => 'category',
'hide_empty' => true,
'fields' => 'ids',
'meta_query' => array(),
));
// Получаем все категории
$all_cats = get_terms(array(
'taxonomy' => 'category',
'hide_empty' => false,
'fields' => 'ids',
));
// Определяем пустые категории
$empty_cat_ids = array_diff($all_cats, $empty_cats);
foreach ($empty_cat_ids as $cat_id) {
wp_delete_term($cat_id, 'category');
}
}
Эта функция получает все категории, затем категории с записями, после чего вычисляет разницу и удаляет пустые категории. Однако запускать её нужно аккуратно, чтобы не удалить нужные категории по ошибке.
Запуск функции с помощью WP-Cron
Чтобы функция выполнялась автоматически, можно использовать планировщик задач WordPress — WP-Cron. Добавим задачу, которая будет запускать очистку раз в сутки.
if (!wp_next_scheduled('wptest_daily_empty_cat_cleanup')) {
wp_schedule_event(time(), 'daily', 'wptest_daily_empty_cat_cleanup');
}
add_action('wptest_daily_empty_cat_cleanup', 'wptest_delete_empty_categories');
Такой подход позволяет не задействовать серверный cron, а использовать встроенный механизм WordPress.
Использование плагинов для удаления пустых категорий
Плагин Term Management Tools
Плагин Term Management Tools расширяет возможности управления таксономиями, включая массовое удаление пустых категорий. Он добавляет удобный интерфейс, где можно фильтровать категории по количеству записей и удалять пустые.
Для автоматизации удаления пустых категорий с помощью плагина можно настроить WP-Cron с вызовом пользовательского кода, который будет использовать функции плагина.
Как выбрать плагин для автоматизации удаления
Выбирайте плагины, которые регулярно обновляются и совместимы с вашей версией WordPress. Если ваш сайт использует плагин Clearfy Pro от WPShop, в нём есть функционал для оптимизации таксономий, включая очистку пустых категорий. Подробнее о Clearfy Pro на официальной странице.
Практические рекомендации и нюансы удаления пустых категорий
Проверка перед удалением
Перед автоматическим удалением рекомендуется делать резервную копию базы данных. Также полезно выводить список категорий, которые планируются к удалению, чтобы убедиться в правильности работы функции.
Исключение важных категорий из удаления
Иногда на сайте есть категории, которые временно пусты, но важны для структуры. Для исключения таких категорий добавим проверку по ID или по слагу:
function wptest_delete_empty_categories() {
$exclude_slugs = array('bez-rubriki', 'vazhno');
$empty_cats = get_terms(array(
'taxonomy' => 'category',
'hide_empty' => true,
'fields' => 'ids',
));
$all_cats = get_terms(array(
'taxonomy' => 'category',
'hide_empty' => false,
'fields' => 'ids',
));
$empty_cat_ids = array_diff($all_cats, $empty_cats);
foreach ($empty_cat_ids as $cat_id) {
$term = get_term($cat_id);
if (in_array($term->slug, $exclude_slugs)) {
continue;
}
wp_delete_term($cat_id, 'category');
}
}
Оптимизация для больших сайтов
На сайтах с тысячами категорий и записей функция может работать долго и нагружать сервер. В таких случаях лучше разбивать процесс удаления на части или запускать вручную по расписанию с небольшими интервалами.
Заключение
Автоматическое удаление пустых категорий в WordPress — отличный способ поддерживать чистоту и порядок на сайте без лишних затрат времени. Используйте приведённые примеры кода и плагины, адаптируйте их под свои задачи. Если используете плагины WPShop, обратите внимание на Clearfy Pro, который значительно упрощает оптимизацию сайта. Поддерживайте структуру сайта в актуальном состоянии — это улучшит SEO и удобство для пользователей.