Ведение сайта на WordPress часто сопровождается накоплением ненужных категорий, которые накапливаются со временем и не содержат ни одной записи. Такие категории не только мешают навигации, но и негативно влияют на SEO, создавая «пустые» страницы без контента. В этой статье мы подробно разберём, как автоматически удалить категории без записей в WordPress с помощью кода и каких плагинов можно для этого использовать.
Почему важно удалять категории без записей
Категории без постов создают пустые архивы, по которым поисковые системы могут снизить рейтинг сайта из-за недостатка уникального контента. Кроме того, пустые категории ухудшают пользовательский опыт, так как приводят к страницам с сообщением «Записей не найдено».
Удаление таких категорий помогает поддерживать структуру сайта в порядке и улучшает индексацию.
Как найти категории без записей в WordPress
В WordPress все категории хранятся как термины таксономии category. Каждая категория содержит поле count, которое показывает количество записей, прикрепленных к ней.
Для поиска пустых категорий можно использовать WP_Query или функции терминологии WordPress. Вот пример простого способа получить список таких категорий через PHP:
function wpbit_get_empty_categories() {
$args = [
'taxonomy' => 'category',
'hide_empty' => true,
];
$categories = get_categories($args);
$empty_categories = [];
$all_categories = get_categories(['taxonomy' => 'category', 'hide_empty' => false]);
foreach ($all_categories as $cat) {
if ($cat->count == 0) {
$empty_categories[] = $cat;
}
}
return $empty_categories;
}
Этот код получает все категории и фильтрует те, у которых count равен 0.
Автоматическое удаление категорий без записей — пример кода
Далее рассмотрим функцию, которая удаляет все пустые категории. Будьте осторожны при использовании, лучше сначала вывести список, чтобы убедиться, что удаляются именно нужные категории.
function wpbit_delete_empty_categories() {
$empty_categories = wpbit_get_empty_categories();
foreach ($empty_categories as $cat) {
wp_delete_term($cat->term_id, 'category');
}
}
// Запускаем удаление категорий
wpbit_delete_empty_categories();
Вы можете вызывать эту функцию вручную, например, в файле functions.php вашей темы или в плагине. Для регулярной автоматизации можно использовать WP-Cron.
Автоматизация удаления через WP-Cron
Чтобы запускать удаление пустых категорий по расписанию, добавим задачу в WP-Cron:
// Регистрируем событие при активации темы или плагина
if (!wp_next_scheduled('wpbit_cron_delete_empty_categories')) {
wp_schedule_event(time(), 'daily', 'wpbit_cron_delete_empty_categories');
}
// Хук для удаления категорий
add_action('wpbit_cron_delete_empty_categories', 'wpbit_delete_empty_categories');
Теперь функция будет запускаться один раз в сутки и удалять пустые категории автоматически.
Использование плагинов для удаления пустых категорий
Если вы не хотите писать код, можно использовать плагины. Среди популярных решений:
- Term Management Tools — позволяет массово управлять категориями, включая удаление пустых.
- WP Bulk Delete — мощный плагин для массового удаления контента, включая категории без записей.
Для интеграции с WPShop можно рекомендовать Clearfy Pro, который помогает оптимизировать сайт, включая очистку таксономий и удаление пустых категорий.
Советы и предостережения при удалении категорий
Перед удалением категорий обязательно сделайте резервную копию базы данных, чтобы избежать потери нужных данных.
Удаление категории не удаляет записи, принадлежащие к ней, но записи могут потерять связь с категорией, если она была основной.
Если категории используются в меню или виджетах, после удаления могут появиться ошибки, проверьте и обновите их.
Как проверить результат удаления категорий
Для проверки вы можете вывести список категорий до и после удаления пустых:
function wpbit_list_categories() {
$cats = get_categories(['taxonomy' => 'category', 'hide_empty' => false]);
echo '<ul>';
foreach ($cats as $cat) {
echo '<li>' . esc_html($cat->name) . ' (ID: ' . $cat->term_id . ', count: ' . $cat->count . ')</li>';
}
echo '</ul>';
}
Вызовите эту функцию до и после удаления, чтобы убедиться, что все пустые категории успешно удалены.