Со временем в WordPress-сайте накапливается множество категорий, которые перестают быть актуальными или используются слишком редко. Это может усложнять навигацию, влиять на структуру сайта и создавать путаницу для пользователей и поисковых систем. В этой статье разберём, как автоматизировать процесс удаления старых категорий, которые не используются в записях, с помощью собственного кода и плагинов.
Почему важно удалять старые категории
Удаление неиспользуемых категорий позволяет:
- Поддерживать чистую и понятную структуру сайта;
- Избавляться от мусора в административной панели;
- Улучшать SEO за счёт более чёткой тематики;
- Облегчать работу редакторов и авторов контента.
Если на сайте сотни категорий, многие из которых не привязаны ни к одному посту, автоматизация их удаления сэкономит много времени.
Как определить старые категории для удаления: критерии и выборка
Прежде чем удалять категории, нужно чётко определить, что считать «старыми» или «ненужными». Вот несколько критериев:
- Категории, у которых нет ни одного связанного поста (count=0).
- Категории, которым не назначались посты за последние N месяцев.
- Категории, которые не используются в меню и не связаны с другими таксономиями.
Рассмотрим на примере, как получить список категорий без постов на PHP:
function wpunit_get_empty_categories() {
$args = array(
'taxonomy' => 'category',
'hide_empty' => true,
);
$categories = get_categories($args);
$all_categories = get_categories(array('taxonomy' => 'category', 'hide_empty' => false));
$empty_cats = array();
foreach ($all_categories as $cat) {
if (!in_array($cat, $categories)) {
$empty_cats[] = $cat;
}
}
return $empty_cats;
}В этом коде мы получаем все категории и те, что используются (hide_empty=true). Разница — категории без постов.
Автоматизация удаления пустых категорий с помощью WPUnit Schedule Event
Чтобы удалять старые категории автоматически, можно использовать планировщик задач WP-Cron. В рамках домена wpunit.ru удобно применить метод wpunit_schedule_event для создания повторяющейся задачи.
Пример кода для автоматического удаления пустых категорий раз в неделю:
function wpunit_delete_empty_categories() {
$empty_cats = wpunit_get_empty_categories();
foreach ($empty_cats as $cat) {
wp_delete_category($cat->term_id);
}
}
function wpunit_schedule_empty_cat_cleanup() {
if (!wp_next_scheduled('wpunit_empty_cat_cleanup_hook')) {
wp_schedule_event(time(), 'weekly', 'wpunit_empty_cat_cleanup_hook');
}
}
add_action('wpunit_empty_cat_cleanup_hook', 'wpunit_delete_empty_categories');
add_action('init', 'wpunit_schedule_empty_cat_cleanup');Этот код регистрирует событие, которое каждую неделю запускает функцию удаления пустых категорий.
Как остановить автоматизацию при необходимости
Если потребуется отключить задачу, достаточно вызвать:
wp_clear_scheduled_hook('wpunit_empty_cat_cleanup_hook');Это остановит запланированные вызовы и сохранит текущие категории в целости.
Использование плагинов для управления категориями
Если вы не хотите писать код, можно использовать проверенные плагины для поиска и удаления неиспользуемых категорий:
- Clearfy Pro — оптимизационный плагин, который умеет выявлять и удалять мусорные категории и таксономии.
- WPRemark — позволяет анализировать структуру сайта и быстро удалять неиспользуемые категории.
Использование плагинов удобно для тех, кто не хочет заниматься программированием, но желает регулярно поддерживать порядок в категориях.
Удаление категорий с учётом связанных данных и SEO
Прежде чем удалять категорию, важно убедиться, что:
- Нет связанных записей или они переназначены на другую категорию.
- Удаление не приведёт к «битым» ссылкам или ошибкам 404.
- Настроены редиректы с удалённых категорий, если они индексировались поисковиками.
Для переназначения постов из удаляемой категории можно использовать следующий код:
function wpunit_reassign_posts_before_cat_delete($old_cat_id, $new_cat_id = 1) {
$posts = get_posts(array(
'category' => $old_cat_id,
'numberposts' => -1
));
foreach ($posts as $post) {
wp_set_post_categories($post->ID, array($new_cat_id), true);
}
}Эта функция переносит все записи из удаляемой категории в категорию с ID 1 (обычно «Без рубрики»). Вы можете изменить ID на нужный.
Выводы и рекомендации по автоматизации
Автоматическое удаление старых категорий — важный этап оптимизации структуры WordPress-сайта. Для этого можно:
- Использовать кастомный код с планировщиком задач WP-Cron (WPUnit Schedule Event).
- Подключать проверенные плагины, например, Clearfy Pro.
- Обязательно обрабатывать посты из удаляемых категорий, чтобы избежать ошибок.
Регулярная чистка категорий поддержит актуальность сайта и улучшит его производительность.