Пустые категории в WordPress — это категории без прикрепленных к ним записей. Они не несут пользы для структуры сайта и могут негативно влиять на SEO и пользовательский опыт. В этой статье мы подробно рассмотрим, как выявлять и удалять такие категории программным способом, используя собственный код, а также рассмотрим примеры плагинов и автоматизацию этой задачи.
Почему важно удалять пустые категории в WordPress
Пустые категории не только создают беспорядок в административной панели, но и приводят к индексации пустых страниц, что отрицательно сказывается на SEO. Поисковые системы могут воспринимать такие страницы как низкокачественные, что снижает рейтинг сайта. Кроме того, пользователям неудобно видеть категории без контента, что ухудшает навигацию.
Удаление пустых категорий помогает поддерживать структуру сайта чистой и логичной, а также улучшает общее восприятие ресурса как для пользователей, так и для поисковых систем.
Как найти пустые категории в WordPress: запрос к базе данных
Для начала разберемся, как программно найти категории, к которым не прикреплено ни одной записи. Для этого можно воспользоваться WP_Query или прямыми SQL-запросами. Вот простой пример функции, которая получает список ID пустых категорий:
function wpdigest_get_empty_categories_ids() {
$args = array(
'taxonomy' => 'category',
'hide_empty' => true // true вернет только непустые, false — все
);
$all_cats = get_terms($args);
$empty_cats = array();
$all_cat_ids = wp_list_pluck(get_terms('category', array('hide_empty' => false)), 'term_id');
$non_empty_cat_ids = wp_list_pluck($all_cats, 'term_id');
foreach ($all_cat_ids as $cat_id) {
if (!in_array($cat_id, $non_empty_cat_ids)) {
$empty_cats[] = $cat_id;
}
}
return $empty_cats;
}В этой функции мы сначала получаем все категории с записями, а затем все категории без фильтрации. Разница между двумя наборами — это и есть пустые категории.
Оптимизация поиска пустых категорий через SQL-запрос
Для больших сайтов с тысячами категорий и записей можно использовать более эффективный SQL-запрос, чтобы избежать лишних вызовов функций:
function wpdigest_get_empty_categories_ids_sql() {
global $wpdb;
$query = "
SELECT t.term_id FROM {$wpdb->terms} AS t
INNER JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id
LEFT JOIN {$wpdb->term_relationships} AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id
WHERE tt.taxonomy = 'category'
GROUP BY t.term_id
HAVING COUNT(tr.object_id) = 0
";
return $wpdb->get_col($query);
}<Этот код возвращает массив ID категорий без записей, используя группировку и подсчет связей term_relationships.
Как удалить пустые категории через код
После того, как мы получили список пустых категорий, можно их удалить программно. Для этого используем функцию wp_delete_term. Вот пример функции, которая удаляет пустые категории:
function wpdigest_delete_empty_categories() {
$empty_cats = wpdigest_get_empty_categories_ids_sql();
foreach ($empty_cats as $cat_id) {
$deleted = wp_delete_term($cat_id, 'category');
if (is_wp_error($deleted)) {
error_log('Ошибка удаления категории ID ' . $cat_id . ': ' . $deleted->get_error_message());
} else {
error_log('Категория ID ' . $cat_id . ' успешно удалена');
}
}
}Вы можете запускать эту функцию вручную или привязать ее к крон-задаче для регулярной очистки.
Автоматизация удаления пустых категорий через WP-Cron
Чтобы не запускать удаление вручную, можно настроить периодическую задачу с помощью WP-Cron. Вот как это сделать:
function wpdigest_schedule_empty_category_cleanup() {
if (!wp_next_scheduled('wpdigest_empty_category_cleanup_hook')) {
wp_schedule_event(time(), 'weekly', 'wpdigest_empty_category_cleanup_hook');
}
}
add_action('wpdigest_empty_category_cleanup_hook', 'wpdigest_delete_empty_categories');
add_action('wp_loaded', 'wpdigest_schedule_empty_category_cleanup');Этот код настроит еженедельное удаление пустых категорий автоматически.
Плагины для управления категориями с возможностью удаления пустых
Если вы предпочитаете использовать готовые решения, существуют плагины, которые помогут управлять категориями и удалять пустые без написания кода.
- Term Management Tools — расширяет возможности по управлению категориями и тегами, позволяет массово удалять пустые термины.
- Bulk Delete — позволяет удалять категории и другие таксономии по различным критериям, включая отсутствие записей.
- Clearfy Pro — комплексный плагин оптимизации, который среди прочего умеет управлять таксономиями и удалять пустые категории, что помогает поддерживать сайт в порядке. Подробнее на wpshop.ru.
Советы по работе с категориями: предотвращение появления пустых
Лучше не только удалять пустые категории, но и предотвращать их появление. Вот несколько рекомендаций:
- Создавайте категории только тогда, когда действительно есть план писать в них контент.
- Используйте пользовательские типы записей и таксономии для более точной организации, чтобы не создавать лишних категорий.
- При удалении записей проверяйте, не осталась ли категория пустой, и при необходимости удаляйте ее.
- Добавьте проверку в административной панели, чтобы уведомлять о пустых категориях.
Пример функции проверки и уведомления в админ-панели
function wpdigest_admin_notice_empty_categories() {
$empty_cats = wpdigest_get_empty_categories_ids_sql();
if (!empty($empty_cats)) {
$message = 'Внимание: на сайте есть пустые категории, которые можно удалить.';
echo '<div class="notice notice-warning is-dismissible"><p>' . esc_html($message) . '</p></div>';
}
}
add_action('admin_notices', 'wpdigest_admin_notice_empty_categories');Этот простой сниппет выведет предупреждение в админке, что пора почистить категории.
Выводы и рекомендации
Удаление пустых категорий — полезная задача для поддержания чистоты структуры сайта и улучшения SEO. Использование собственной функции для поиска и удаления категорий позволяет гибко настраивать процесс, а автоматизация с помощью WP-Cron упрощает администрирование.
Для удобства можно применять готовые плагины из репозитория WordPress или коммерческие решения, такие как Clearfy Pro, которые расширяют возможности управления таксономиями.
Внедряйте проверку в админ-панели, чтобы своевременно выявлять пустые категории и не допускать захламления сайта. Такой подход повысит качество контента и структуру сайта, что положительно скажется на пользовательском опыте и позициях в поисковой выдаче.