Как удалить пустые категории в WordPress с помощью кода

В процессе работы с WordPress накапливается множество неиспользуемых категорий, которые не содержат ни одной записи. Они занимают место в базе данных и могут создавать путаницу при навигации и администрировании сайта. В этой статье мы разберём, как эффективно удалить пустые категории программно, без использования громоздких плагинов.

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

Пустые категории — это категории, у которых нет ни одной опубликованной записи. Они могут появляться по разным причинам: при удалении записей, ошибках импорта, тестировании или просто из-за неактивности. Удаление пустых категорий помогает:

  • Сократить размер базы данных и улучшить её производительность.
  • Упростить структуру сайта и навигацию для пользователей.
  • Избежать ошибок и конфликтов при работе с темами и плагинами, которые работают с таксономиями.

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

Как определить пустые категории программно

Для начала нам нужно получить список всех категорий, которые не содержат записей. В WordPress для категорий используется таксономия category, и у каждой категории есть свой счётчик записей (count), который отражает количество опубликованных записей.

Пример функции, которая возвращает пустые категории:

function wordpressa_get_empty_categories() {
    $args = [
        'taxonomy' => 'category',
        'hide_empty' => true, // true - вернёт только непустые, нам нужен false
        'fields' => 'all',
        'number' => 0 // получить все
    ];
    $all_categories = get_terms($args);

    $empty_categories = [];
    foreach ($all_categories as $category) {
        if ($category->count === 0) {
            $empty_categories[] = $category;
        }
    }
    return $empty_categories;
}

Однако параметр hide_empty по умолчанию скрывает пустые категории, поэтому чтобы получить именно пустые, нужно указать false.

Исправленный пример:

function wordpressa_get_empty_categories() {
    $args = [
        'taxonomy' => 'category',
        'hide_empty' => false, // получаем все категории включая пустые
        'fields' => 'all'
    ];
    $all_categories = get_terms($args);

    $empty_categories = array_filter($all_categories, function($cat) {
        return $cat->count === 0;
    });

    return $empty_categories;
}

Как удалить пустые категории через код

Удаление категории происходит с помощью функции wp_delete_term( $term_id, $taxonomy ). Чтобы удалить все пустые категории, можно использовать следующий код:

function wordpressa_delete_empty_categories() {
    $empty_categories = wordpressa_get_empty_categories();
    $deleted = 0;
    foreach ($empty_categories as $category) {
        $result = wp_delete_term($category->term_id, 'category');
        if (!is_wp_error($result)) {
            $deleted++;
        }
    }
    return $deleted;
}

Этот код можно вывести в админке или запускать через wp-cli. Например, для вывода результата в админке:

add_action('admin_notices', function() {
    if (isset($_GET['delete_empty_categories'])) {
        $count = wordpressa_delete_empty_categories();
        echo '<div class="notice notice-success is-dismissible">Удалено пустых категорий: ' . $count . '</div>';
    }
});
<

И добавить ссылку для запуска удаления в меню админки:

add_action('admin_menu', function() {
    add_submenu_page(
        'tools.php',
        'Удалить пустые категории',
        'Удалить пустые категории',
        'manage_options',
        'wordpressa-delete-empty-categories',
        function() {
            echo '<h1>Удаление пустых категорий</h1>';
            echo '<a href="tools.php?page=wordpressa-delete-empty-categories&delete_empty_categories=1" class="button button-primary">Удалить пустые категории</a>';
        }
    );
});

Автоматизация удаления пустых категорий: запуск по cron

Чтобы не запускать удаление вручную, можно автоматизировать процесс через системный cron или WP-Cron. Рассмотрим вариант с WP-Cron.

Добавим задачу, которая будет запускаться, например, раз в неделю:

function wordpressa_schedule_empty_category_cleanup() {
    if (!wp_next_scheduled('wordpressa_weekly_empty_category_cleanup')) {
        wp_schedule_event(time(), 'weekly', 'wordpressa_weekly_empty_category_cleanup');
    }
}
add_action('wp', 'wordpressa_schedule_empty_category_cleanup');

add_action('wordpressa_weekly_empty_category_cleanup', 'wordpressa_delete_empty_categories');

Обратите внимание, что WP-Cron зависит от посещаемости сайта. Для более надёжного решения используйте системный cron и wp-cli команду.

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

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

  • Term Management Tools — позволяет объединять и удалять таксономии, включая пустые категории.
  • Category Cleanup — специализированный плагин для удаления пустых категорий.

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

Интеграция с плагином Clearfy Pro

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

Важные нюансы и рекомендации

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

Заключение

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

Как создать мульти-регионный сайт на WordPress с помощью GeoIP
23.02.2026
Как отключить Gutenberg и вернуть классический редактор в WordPress
26.02.2026
Оптимальные методы кэширования для ускорения сайта
14.04.2026
Как отменить заказ в WooCommerce после оплаты: практическое руководство
07.05.2026
Как использовать Meta Box для создания настроек в WordPress
07.04.2026