Пустые категории в WordPress — это те, в которых нет ни одной опубликованной записи. Они не только создают беспорядок в админке, но и могут негативно влиять на SEO и пользовательский опыт на сайте. В этой статье мы подробно рассмотрим, как автоматически находить и удалять пустые категории в WordPress с помощью кода и плагинов, а также как настроить регулярную очистку с помощью WP-Cron.
Почему важно удалять пустые категории в WordPress
Пустые категории не имеют содержимого, но при этом могут отображаться в меню, виджетах и URL-адресах, что создает путаницу для посетителей сайта и поисковых систем. Кроме того, наличие большого количества пустых таксономий может замедлять работу административной панели и затруднять навигацию для редакторов и авторов.
Регулярное удаление таких категорий помогает поддерживать структуру сайта чистой и понятной, что особенно важно для крупных проектов с большим количеством записей и таксономий.
Однако, вручную проверять и удалять пустые категории неудобно и трудоемко, особенно если их много. Оптимальным решением будет автоматизация этого процесса.
Как найти пустые категории в WordPress программно
Для начала нужно понять, как программно определить, что категория пустая. В WordPress для категорий используется таксономия category. Каждая категория имеет свой ID и количество прикрепленных к ней записей.
Можно использовать функцию get_terms() с параметром 'hide_empty' => true, чтобы получить только непустые категории, либо 'hide_empty' => false, чтобы получить все и сравнить количество записей.
Пример функции, которая получает пустые категории:
function wpmentor_get_empty_categories() {
$empty_cats = get_terms(array(
'taxonomy' => 'category',
'hide_empty' => true, // true возвращает только непустые, нам нужно false
'fields' => 'all'
));
$empty_categories = array();
foreach ($empty_cats as $cat) {
if ($cat->count == 0) {
$empty_categories[] = $cat;
}
}
return $empty_categories;
}Однако правильнее сразу вызвать с 'hide_empty' => false, чтобы получить все категории и проверить их счетчик count.
Исправленный код:
function wpmentor_get_empty_categories() {
$all_cats = get_terms(array(
'taxonomy' => 'category',
'hide_empty' => false,
'fields' => 'all'
));
$empty_categories = array();
foreach ($all_cats as $cat) {
if ($cat->count == 0) {
$empty_categories[] = $cat;
}
}
return $empty_categories;
}Как автоматически удалять пустые категории через WP-Cron
Удалять пустые категории вручную неудобно и рискованно, особенно на динамичных ресурсах. Лучше настроить автоматическую очистку с помощью WP-Cron — встроенного планировщика задач WordPress.
Ниже пример функции, которая удаляет все пустые категории, а также код для регистрации и запуска задачи по расписанию:
function wpmentor_delete_empty_categories() {
$empty_categories = wpmentor_get_empty_categories();
foreach ($empty_categories as $cat) {
wp_delete_term($cat->term_id, 'category');
}
}
// Регистрируем событие, если еще не зарегистрировано
if (!wp_next_scheduled('wpmentor_cron_delete_empty_categories')) {
wp_schedule_event(time(), 'daily', 'wpmentor_cron_delete_empty_categories');
}
// Подписываем функцию на событие
add_action('wpmentor_cron_delete_empty_categories', 'wpmentor_delete_empty_categories');Этот код настроит ежедневное удаление пустых категорий. Вы можете изменить частоту на 'hourly', 'twicedaily' или создать собственный интервал.
Плагины для управления категориями и таксономиями
Если вы предпочитаете использовать готовые решения, обратите внимание на следующие плагины, которые помогут управлять категориями и удалять пустые таксономии:
- Clearfy Pro — плагин для оптимизации WordPress, который среди прочего позволяет удалять пустые категории и таксономии.
- WPRemark — плагин для работы с отзывами, но в нем есть удобные инструменты для очистки таксономий и структур сайта.
Использование плагинов удобно, если вы не хотите заниматься кодом, но будьте внимательны с автоматическим удалением — всегда делайте резервные копии сайта.
Как защититься от удаления нужных категорий и ошибки в автоматизации
Автоматическое удаление может иметь побочные эффекты, если в категории есть черновики или запланированные записи — они не учитываются в параметре count. Чтобы избежать потери данных, рекомендуется:
- Перед удалением проверять наличие записей любого статуса, не только опубликованных.
- Добавлять исключения для категорий, которые нельзя удалять (например, системные или важные).
- Делать резервные копии базы данных перед запуском автоматизации.
Для более точной проверки можно использовать WP_Query с параметром 'post_status' => 'any', чтобы найти все записи в категории:
function wpmentor_is_category_empty($cat_id) {
$query = new WP_Query(array(
'cat' => $cat_id,
'post_status' => 'any',
'posts_per_page' => 1
));
return !$query->have_posts();
}И тогда в функции удаления использовать именно эту проверку.
Выводы и рекомендации
Автоматическое удаление пустых категорий — важная задача для поддержания чистоты и оптимизации вашего сайта на WordPress. Используйте показанные в статье методы и примеры кода, чтобы настроить этот процесс безопасно и эффективно.
Если вы хотите расширить функциональность, рекомендуем посмотреть плагины Clearfy Pro и WPRemark для комплексной оптимизации и управления категориями.