Пустые категории в WordPress возникают, когда все записи из категории удалены или перенесены в другие категории, но сама категория остается в списке. Это может создавать путаницу для администраторов и ухудшать навигацию на сайте. В этой статье мы подробно рассмотрим, как удалить такие категории программно и с помощью плагинов, а также как автоматизировать процесс очистки.
Почему важно удалять пустые категории в WordPress
Пустые категории не несут пользы для сайта — они загромождают админпанель, усложняют структуру и могут негативно влиять на SEO, так как создают лишние URL без контента. Кроме того, пользователи могут столкнуться с ошибками 404, если по ссылкам ведут на пустые страницы категорий.
Автоматизация удаления пустых категорий поможет поддерживать чистоту таксономий, особенно если на сайте часто добавляют и удаляют записи.
Как найти пустые категории в WordPress: SQL-запрос и WP_Query
Для начала нужно определить, какие категории пустые. Это можно сделать несколькими способами.
Использование SQL-запроса
Через phpMyAdmin или другой инструмент работы с базой данных выполните запрос, который покажет категории без записей:
SELECT t.term_id, t.name FROM wp_terms t
INNER JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id
WHERE tt.taxonomy = 'category' AND tt.count = 0;Здесь tt.count = 0 означает, что в категории нет записей.
Использование WP_Query и get_terms()
В коде WordPress можно получить пустые категории так:
function wp_lessons_get_empty_categories() {
$empty_cats = get_terms(array(
'taxonomy' => 'category',
'hide_empty' => true // true — скрыть непустые, false — показать все
));
$empty = array();
foreach ($empty_cats as $cat) {
if ($cat->count === 0) {
$empty[] = $cat;
}
}
return $empty;
}Здесь мы фильтруем категории с нулевым количеством записей.
Программное удаление пустых категорий: пример функции для wp-lessons.ru
Чтобы автоматически удалить пустые категории, можно написать функцию, которая будет их находить и удалять. Это удобно добавить в файл functions.php или в кастомный плагин.
function wp_lessons_delete_empty_categories() {
$empty_cats = get_terms(array(
'taxonomy' => 'category',
'hide_empty' => false,
));
foreach ($empty_cats as $cat) {
if ($cat->count === 0) {
wp_delete_term($cat->term_id, 'category');
}
}
}
// Запуск функции, например, при активации плагина или по крону
// wp_lessons_delete_empty_categories();Обратите внимание, что wp_delete_term() удаляет категорию по ID. При необходимости можно вызвать эту функцию вручную или через WP-Cron.
Добавление автоматизации через WP-Cron
Для регулярной очистки пустых категорий можно настроить событие WordPress Cron:
if (!wp_next_scheduled('wp_lessons_cron_delete_empty_cats')) {
wp_schedule_event(time(), 'daily', 'wp_lessons_cron_delete_empty_cats');
}
add_action('wp_lessons_cron_delete_empty_cats', 'wp_lessons_delete_empty_categories');Это вызовет удаление пустых категорий каждый день.
Использование плагинов для управления категориями и очистки
Если вы не хотите писать код, есть плагины, которые помогут найти и удалить пустые категории.
- Term Management Tools — позволяет массово удалять и объединять категории.
- WP Bulk Delete — управляет удалением постов, категорий и других таксономий по разным условиям.
- Clearfy Pro — плагин оптимизации WordPress, который среди прочего помогает управлять таксономиями и может облегчить очистку.
Например, с помощью Clearfy Pro можно настроить автоматическую оптимизацию базы данных, включая удаление пустых таксономий.
Как предотвратить появление пустых категорий в будущем
Лучший способ — не создавать категории без записей или не оставлять их пустыми длительное время.
При удалении постов стоит проверять, не осталась ли категория пустой, и при необходимости удалять её программно или вручную. Здесь пригодится функция из предыдущего раздела.
Также можно добавить проверку при удалении записи через хук delete_post:
add_action('delete_post', 'wp_lessons_check_and_delete_empty_category');
function wp_lessons_check_and_delete_empty_category($post_id) {
$categories = wp_get_post_categories($post_id);
foreach ($categories as $cat_id) {
$cat = get_term($cat_id, 'category');
if ($cat && $cat->count === 1) { // Если после удаления записи категория станет пустой
wp_delete_term($cat_id, 'category');
}
}
}Так вы будете автоматически удалять категории, которые остаются пустыми после удаления записей.
Выводы и рекомендации
Удаление пустых категорий — важный шаг для поддержания чистоты и удобства управления контентом в WordPress. Используйте приведенный код для автоматизации процесса, дополняйте его WP-Cron для регулярной очистки и рассматривайте плагины для удобства.
Если ваш сайт использует темы из WPSHOP, убедитесь, что кастомные типы записей и таксономии настроены корректно, чтобы избежать появления пустых категорий.