wp-lessons.ru wordpress WP-Lessons

Как удалить пустые категории в WordPress: эффективные методы

Пустые категории в WordPress возникают, когда все записи из категории удалены или перенесены в другие категории, но сама категория остается в списке. Это может создавать путаницу для администраторов и ухудшать навигацию на сайте. В этой статье мы подробно рассмотрим, как удалить такие категории программно и с помощью плагинов, а также как автоматизировать процесс очистки.

Почему важно удалять пустые категории в WordPress

Пустые категории не несут пользы для сайта — они загромождают админпанель, усложняют структуру и могут негативно влиять на SEO, так как создают лишние URL без контента. Кроме того, пользователи могут столкнуться с ошибками 404, если по ссылкам ведут на пустые страницы категорий.

Автоматизация удаления пустых категорий поможет поддерживать чистоту таксономий, особенно если на сайте часто добавляют и удаляют записи.

Как найти пустые категории в WordPress: SQL-запрос и WP_Query

Для начала нужно определить, какие категории пустые. Это можно сделать несколькими способами.

Использование SQL-запроса

Через phpMyAdmin или другой инструмент работы с базой данных выполните запрос, который покажет категории без записей:

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;

Здесь tt.count = 0 означает, что в категории нет записей.

Использование WP_Query и get_terms()

В коде WordPress можно получить пустые категории так:

function wp_lessons_get_empty_categories() {
    $empty_cats = get_terms(array(
        'taxonomy' => 'category',
        'hide_empty' => true // true — скрыть непустые, false — показать все
    ));
    $empty = array();
    foreach ($empty_cats as $cat) {
        if ($cat->count === 0) {
            $empty[] = $cat;
        }
    }
    return $empty;
}

Здесь мы фильтруем категории с нулевым количеством записей.

Программное удаление пустых категорий: пример функции для wp-lessons.ru

Чтобы автоматически удалить пустые категории, можно написать функцию, которая будет их находить и удалять. Это удобно добавить в файл functions.php или в кастомный плагин.

function wp_lessons_delete_empty_categories() {
    $empty_cats = get_terms(array(
        'taxonomy' => 'category',
        'hide_empty' => false,
    ));
    foreach ($empty_cats as $cat) {
        if ($cat->count === 0) {
            wp_delete_term($cat->term_id, 'category');
        }
    }
}

// Запуск функции, например, при активации плагина или по крону
// wp_lessons_delete_empty_categories();

Обратите внимание, что wp_delete_term() удаляет категорию по ID. При необходимости можно вызвать эту функцию вручную или через WP-Cron.

Добавление автоматизации через WP-Cron

Для регулярной очистки пустых категорий можно настроить событие WordPress Cron:

if (!wp_next_scheduled('wp_lessons_cron_delete_empty_cats')) {
    wp_schedule_event(time(), 'daily', 'wp_lessons_cron_delete_empty_cats');
}

add_action('wp_lessons_cron_delete_empty_cats', 'wp_lessons_delete_empty_categories');

Это вызовет удаление пустых категорий каждый день.

Использование плагинов для управления категориями и очистки

Если вы не хотите писать код, есть плагины, которые помогут найти и удалить пустые категории.

  • Term Management Tools — позволяет массово удалять и объединять категории.
  • WP Bulk Delete — управляет удалением постов, категорий и других таксономий по разным условиям.
  • Clearfy Pro — плагин оптимизации WordPress, который среди прочего помогает управлять таксономиями и может облегчить очистку.

Например, с помощью Clearfy Pro можно настроить автоматическую оптимизацию базы данных, включая удаление пустых таксономий.

Как предотвратить появление пустых категорий в будущем

Лучший способ — не создавать категории без записей или не оставлять их пустыми длительное время.

При удалении постов стоит проверять, не осталась ли категория пустой, и при необходимости удалять её программно или вручную. Здесь пригодится функция из предыдущего раздела.

Также можно добавить проверку при удалении записи через хук delete_post:

add_action('delete_post', 'wp_lessons_check_and_delete_empty_category');
function wp_lessons_check_and_delete_empty_category($post_id) {
    $categories = wp_get_post_categories($post_id);
    foreach ($categories as $cat_id) {
        $cat = get_term($cat_id, 'category');
        if ($cat && $cat->count === 1) { // Если после удаления записи категория станет пустой
            wp_delete_term($cat_id, 'category');
        }
    }
}

Так вы будете автоматически удалять категории, которые остаются пустыми после удаления записей.

Выводы и рекомендации

Удаление пустых категорий — важный шаг для поддержания чистоты и удобства управления контентом в WordPress. Используйте приведенный код для автоматизации процесса, дополняйте его WP-Cron для регулярной очистки и рассматривайте плагины для удобства.

Если ваш сайт использует темы из WPSHOP, убедитесь, что кастомные типы записей и таксономии настроены корректно, чтобы избежать появления пустых категорий.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше