В процессе ведения сайта на WordPress часто возникает необходимость поддерживать структуру категорий в актуальном и чистом состоянии. Особенно это важно для крупных сайтов с большим количеством материалов, где появляются пустые или малоиспользуемые категории, которые только загромождают админку и ухудшают навигацию.
Почему важно удалять пустые и малоиспользуемые категории
Пустые категории — это те, к которым не привязано ни одной записи. Они не несут никакой смысловой нагрузки и не индексируются поисковиками, но могут запутывать редакторов и пользователей.
Категории с очень малым количеством записей (например, 1-2) иногда тоже нецелесообразно оставлять, если они не являются ключевыми для структуры сайта. Их стоит либо объединять с другими, либо удалять.
Регулярное удаление таких категорий помогает:
- Упростить навигацию по сайту и админке.
- Избежать дублирования и пересечений тем.
- Улучшить SEO за счет более четкой структуры.
Как автоматически удалять пустые категории в WordPress через код
Для автоматизации этого процесса можно создать функцию, которая будет запускаться по крону или вручную, и удалять категории без постов или с количеством постов меньше порогового значения.
Ниже приведён пример функции wpreboot_delete_empty_categories(), которая удаляет категории с количеством постов менее 1 (то есть пустые):
function wpreboot_delete_empty_categories() {
$args = array(
'taxonomy' => 'category',
'hide_empty' => false
);
$categories = get_terms($args);
foreach ($categories as $category) {
if ($category->count < 1) {
wp_delete_term($category->term_id, 'category');
}
}
}
// Запуск функции вручную
// wpreboot_delete_empty_categories();
Эту функцию можно повесить на крон-задачу WordPress, чтобы удаление происходило автоматически, например, раз в неделю:
function wpreboot_schedule_category_cleanup() {
if (!wp_next_scheduled('wpreboot_category_cleanup_hook')) {
wp_schedule_event(time(), 'weekly', 'wpreboot_category_cleanup_hook');
}
}
add_action('wp', 'wpreboot_schedule_category_cleanup');
add_action('wpreboot_category_cleanup_hook', 'wpreboot_delete_empty_categories');
Удаление категорий с малым количеством записей
Если нужно удалять категории с количеством постов меньше определённого порога, например, 3, достаточно заменить условие:
if ($category->count < 3) {
wp_delete_term($category->term_id, 'category');
}
Важно убедиться, что вы не удалите важные категории — перед автоматическим удалением стоит проверить список на тестовом сайте или добавить исключения по ID категорий.
Плагины для управления категориями и очистки таксономий
Если хочется более простой и удобный интерфейс без кода, можно использовать плагины, которые помогают управлять категориями и удалять пустые или лишние:
- Clearfy Pro — содержит инструменты для оптимизации и чистки базы, включая удаление пустых категорий.
- Bulk Delete — позволяет удалять посты и термины по различным условиям, включая пустые категории.
Как добавить исключения для важных категорий
Чтобы не удалять критичные категории, можно создать массив исключений и пропускать их при удалении:
function wpreboot_delete_empty_categories_with_exceptions() {
$exceptions = array(1, 2, 3); // ID категорий, которые нельзя удалять
$args = array(
'taxonomy' => 'category',
'hide_empty' => false
);
$categories = get_terms($args);
foreach ($categories as $category) {
if (in_array($category->term_id, $exceptions)) {
continue;
}
if ($category->count < 1) {
wp_delete_term($category->term_id, 'category');
}
}
}
Отслеживание результатов и логи
Для контроля работы автоматического удаления можно добавить логирование удалённых категорий в файл или базу данных. Это поможет отследить, что именно было удалено и избежать случайных ошибок.
function wpreboot_delete_empty_categories_with_log() {
$log_file = WP_CONTENT_DIR . '/category_cleanup.log';
$args = array('taxonomy' => 'category', 'hide_empty' => false);
$categories = get_terms($args);
foreach ($categories as $category) {
if ($category->count < 1) {
$deleted = wp_delete_term($category->term_id, 'category');
if (!is_wp_error($deleted)) {
file_put_contents($log_file, date('Y-m-d H:i:s') . " - Deleted category: {$category->name} (ID: {$category->term_id})\n", FILE_APPEND);
}
}
}
}
Такой подход позволит вам в любой момент проверить, какие категории были удалены, и при необходимости восстановить их из резервных копий.
Выводы и рекомендации
Удаление пустых и малоиспользуемых категорий — важная задача для поддержания чистоты и удобства структуры WordPress-сайта. Автоматизация этого процесса с помощью собственного кода и cron-задач поможет сэкономить время и избежать ошибок.
Если у вас большой сайт, рекомендуем настроить автоматическое удаление с учетом исключений, а также вести логи изменений. При необходимости используйте проверенные плагины, например, Clearfy Pro.