В WordPress пустые категории — это те категории, в которых нет записей. Они могут возникать при удалении записей или при массовом импорте контента. Такие категории не несут пользы для структуры сайта, могут запутывать пользователей и влиять на SEO. В этой статье разберём, как автоматически удалять пустые категории с помощью кода, а также рассмотрим полезные плагины, которые помогут в управлении категориями.
Почему важно удалять пустые категории в WordPress
Пустые категории — это не только визуальный мусор в админке, но и потенциальная проблема для SEO и навигации сайта. Поисковые системы могут воспринимать страницы с пустыми категориями как дублирующий или некачественный контент, что негативно скажется на ранжировании. Кроме того, пользователи, переходя по категориям, не должны попадать на пустые страницы, чтобы не ухудшать пользовательский опыт.
Удаление пустых категорий помогает поддерживать структуру сайта в порядке, упрощает администрирование и улучшает восприятие сайта посетителями.
Как найти пустые категории в WordPress с помощью SQL-запроса
Для начала полезно получить список всех пустых категорий, чтобы понимать, какие именно ветки можно удалить. Вот пример SQL-запроса, который можно выполнить через phpMyAdmin или WP-CLI:
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;Этот запрос выбирает ID и названия категорий, у которых количество записей (count) равно нулю. Обратите внимание, что префикс таблиц wp_ может отличаться в вашей базе данных.
Автоматическое удаление пустых категорий с помощью PHP-кода
Чтобы автоматизировать процесс удаления пустых категорий, можно использовать хук WordPress и написать функцию, которая будет искать и удалять такие категории. Ниже приведён пример функции wpnote_delete_empty_categories, которую можно добавить в файл functions.php вашей темы или в собственный плагин.
function wpnote_delete_empty_categories() {
$empty_cats = get_terms(
array(
'taxonomy' => 'category',
'hide_empty' => true // true вернёт только заполненные, поэтому ставим false для пустых
)
);
$all_cats = get_terms(
array(
'taxonomy' => 'category',
'hide_empty' => false
)
);
$empty_cat_ids = array();
foreach ( $all_cats as $cat ) {
if ( $cat->count == 0 ) {
$empty_cat_ids[] = $cat->term_id;
}
}
if ( !empty( $empty_cat_ids ) ) {
foreach ( $empty_cat_ids as $cat_id ) {
wp_delete_term( $cat_id, 'category' );
}
}
}
// Пример вызова функции при активации плагина или вручную
// add_action('init', 'wpnote_delete_empty_categories');В этом примере мы сначала получаем все категории, включая пустые, а затем фильтруем те, у которых счетчик записей равен нулю. После этого вызываем функцию wp_delete_term для удаления каждой пустой категории.
Обратите внимание, что удаление категорий — это необратимая операция, поэтому рекомендуется сделать резервную копию базы данных перед выполнением.
Настройка автоматического удаления пустых категорий по расписанию
Чтобы не запускать функцию вручную, можно добавить её выполнение в планировщик WordPress (WP-Cron). Это удобно для сайтов с частой публикацией и удалением контента.
function wpnote_schedule_empty_cat_cleanup() {
if ( ! wp_next_scheduled( 'wpnote_empty_cat_cleanup_hook' ) ) {
wp_schedule_event( time(), 'daily', 'wpnote_empty_cat_cleanup_hook' );
}
}
add_action( 'wp', 'wpnote_schedule_empty_cat_cleanup' );
add_action( 'wpnote_empty_cat_cleanup_hook', 'wpnote_delete_empty_categories' );В этом коде мы планируем ежедневный запуск функции удаления пустых категорий. Вы можете изменить периодичность с 'daily' на 'hourly' или 'weekly' в зависимости от нужд сайта.
Плагины для управления категориями и их очистки
Если вы предпочитаете использовать готовые решения, обратите внимание на следующие плагины:
- Term Management Tools — расширяет стандартные возможности управления терминами и может помочь в объединении и удалении категорий.
- WP Sweep — позволяет очистить базу данных от мусора, включая пустые категории и теги.
- Clearfy Pro — комплексный оптимизатор WordPress, который также содержит инструменты для управления таксономиями и очистки сайта.
Используя WP Sweep, например, вы можете быстро удалить все пустые категории через интерфейс без написания кода.
Пример использования WP Sweep
После установки и активации WP Sweep перейдите в раздел Инструменты > Sweep. Там вы увидите список элементов для очистки, среди которых будут и пустые категории (Empty Terms). Просто нажмите кнопку Sweep напротив нужного пункта.
Как избежать появления пустых категорий в будущем
Профилактика появления пустых категорий важна для поддержания чистоты структуры сайта. Вот несколько рекомендаций:
- При удалении записей проверяйте, не остались ли связанные с ними категории пустыми.
- Используйте пользовательские скрипты или планировщик на основе WP-Cron для регулярной очистки.
- Автоматизируйте назначение категорий при импорте контента, чтобы записи всегда попадали в нужные категории.
- Если используете WPRemark или другие плагины для отзывов и пользовательского контента, обязательно проверяйте, что создаваемые категории используются корректно.
Заключение
Удаление пустых категорий — важная задача для поддержания порядка в структуре WordPress сайта, улучшения SEO и удобства пользователей. Используйте приведённые в статье методы и примеры кода для автоматизации процесса. При необходимости воспользуйтесь плагинами, такими как WP Sweep или Clearfy Pro, чтобы упростить работу.
Если хотите подробнее изучить возможности оптимизации WordPress, рекомендуем ознакомиться с инструментами и плагинами на WPShop.ru.