Пустые категории в WordPress — это категории, в которых нет ни одной записи. Они часто появляются после удаления постов или при импорте контента, и могут создавать беспорядок в админке и на сайте, а также влиять на SEO. В этой статье мы подробно разберём, как найти и удалить пустые категории в WordPress с помощью кода и плагинов, а также как автоматизировать этот процесс.
Почему важно удалять пустые категории
Пустые категории не несут пользы ни для пользователей, ни для поисковых систем. Они:
- Загромождают структуру таксономий и делают администрирование менее удобным.
- Могут создавать «мёртвые» страницы, которые негативно сказываются на SEO.
- Усложняют навигацию по сайту и могут сбивать с толку посетителей.
Удаление таких категорий помогает поддерживать чистоту и порядок в базе данных и улучшать качество сайта.
Как найти пустые категории в WordPress вручную
Для начала можно проверить категории через админ-панель WordPress. Перейдите в Записи > Рубрики. В списке категорий вы увидите столбец «Количество», который показывает количество записей в каждой категории. Все категории с нулём в этом столбце являются пустыми.
Но если категорий много, проверять вручную неудобно — лучше использовать автоматизацию.
Удаление пустых категорий с помощью SQL-запроса
Если у вас есть доступ к базе данных через phpMyAdmin или другой инструмент, можно удалить пустые категории напрямую SQL-запросом. В WordPress категории — это термины таксономии category, и количество записей учитывается в связях с таблицей wp_term_relationships.
Пример запроса для удаления пустых категорий:
DELETE t, tt FROM wp_terms t INNER JOIN wp_term_taxonomy tt ON t.term_id = tt.term_id LEFT JOIN wp_term_relationships tr ON tt.term_taxonomy_id = tr.term_taxonomy_id WHERE tt.taxonomy = 'category' GROUP BY t.term_id HAVING COUNT(tr.object_id) = 0;Этот запрос удалит все категории, не связанные ни с одной записью. Но будьте осторожны, сделайте резервную копию базы перед выполнением.
Удаление пустых категорий с помощью PHP-кода в functions.php
Для тех, кто предпочитает работать с кодом внутри WordPress, можно написать функцию, которая будет находить и удалять пустые категории программно.
Пример функции wplock_delete_empty_categories():
function wplock_delete_empty_categories() {
$empty_categories = get_categories(array(
'hide_empty' => true,
'fields' => 'ids'
));
$all_categories = get_categories(array(
'hide_empty' => false,
'fields' => 'ids'
));
$to_delete = array_diff($all_categories, $empty_categories);
foreach ($to_delete as $cat_id) {
wp_delete_category($cat_id);
}
}Объяснение:
get_categories(['hide_empty' => true])возвращает только категории с записями.get_categories(['hide_empty' => false])возвращает все категории.- Разница — это пустые категории, которые и удаляются функцией
wp_delete_category().
Чтобы запустить функцию, добавьте вызов в нужном месте, например, через админский экшен или вручную.
Как добавить кнопку для удаления пустых категорий в админке
Можно добавить кастомную страницу или кнопку в админ-панель для удобства:
add_action('admin_menu', function() {
add_submenu_page('tools.php', 'Удалить пустые категории', 'Удалить пустые категории', 'manage_options', 'wplock-delete-empty-categories', 'wplock_render_delete_empty_categories_page');
});
function wplock_render_delete_empty_categories_page() {
if (isset($_POST['wplock_delete_empty'])) {
wplock_delete_empty_categories();
echo '<div class="updated notice">Пустые категории удалены.</div>';
}
echo '<form method="post">';
echo '<input type="hidden" name="wplock_delete_empty" value="1" />';
echo '<input type="submit" class="button button-primary" value="Удалить пустые категории" />';
echo '</form>';
}Так вы получите простой интерфейс для очистки категорий без необходимости заходить в код.
Использование плагинов для удаления пустых категорий
Если вы не хотите писать код, можно воспользоваться бесплатными плагинами из репозитория WordPress:
- Term Management Tools — расширение для работы с терминами, включая массовое удаление пустых категорий.
- WP Bulk Delete — мощный инструмент для массового удаления записей, пользователей и терминов, включая пустые категории.
Пример использования WP Bulk Delete:
- Установите и активируйте плагин.
- Перейдите в Bulk WP > Delete Terms.
- Выберите таксономию
category. - Активируйте опцию «Удалить пустые категории» и выполните удаление.
Как предотвратить появление пустых категорий
Появление пустых категорий можно минимизировать, если:
- При удалении записей проверять и удалять категории, которые после этого остались пустыми.
- Использовать кастомные скрипты (например, из примера выше) для регулярной очистки.
- Ограничить создание категорий без публикации записей.
Автоматизация с помощью WP Cron позволит запускать очистку по расписанию:
if (!wp_next_scheduled('wplock_cron_delete_empty_categories')) {
wp_schedule_event(time(), 'daily', 'wplock_cron_delete_empty_categories');
}
add_action('wplock_cron_delete_empty_categories', 'wplock_delete_empty_categories');Так пустые категории будут удаляться автоматически каждый день.
Заключение
Удаление пустых категорий в WordPress — важная часть поддержания порядка и оптимизации сайта. В статье мы рассмотрели несколько способов: от прямого SQL-запроса до написания PHP-функций и использования плагинов. Выберите подходящий для вашего уровня и задач метод, и ваш сайт станет чище и удобнее для пользователей и поисковых систем.
Если вы хотите дополнительно оптимизировать WordPress, рекомендуем обратить внимание на плагин Clearfy Pro — он помогает улучшить производительность и безопасность сайта.