Как удалить пустые категории в WordPress без плагинов

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

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

Пустые категории не несут полезной информации для посетителей сайта. Они могут:

  • Запутывать пользователей при навигации;
  • Ухудшать структуру внутренней перелинковки;
  • Создавать лишние URL-адреса, которые могут индексироваться поисковыми системами без контента;
  • Усложнять администрирование сайта.

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

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

Пустая категория — это категория, у которой нет записей. В WordPress можно получить список всех категорий и проверить количество записей в каждой с помощью функции wp_link_ru_get_empty_categories(). Давайте напишем пользовательскую функцию для этой задачи.

function wp_link_ru_get_empty_categories() {
    $args = array(
        'taxonomy' => 'category',
        'hide_empty' => true,
    );
    $non_empty_cats = get_terms($args);
    $all_cats = get_terms(array('taxonomy' => 'category', 'hide_empty' => false));
    $empty_cats = array();
    $non_empty_ids = wp_list_pluck($non_empty_cats, 'term_id');
    foreach ($all_cats as $cat) {
        if (!in_array($cat->term_id, $non_empty_ids)) {
            $empty_cats[] = $cat;
        }
    }
    return $empty_cats;
}

Эта функция вернёт массив объектов категорий, у которых нет записей.

Удаление пустых категорий с помощью PHP-кода

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

function wp_link_ru_delete_empty_categories() {
    $empty_cats = wp_link_ru_get_empty_categories();
    foreach ($empty_cats as $cat) {
        $result = wp_delete_term($cat->term_id, 'category');
        if (is_wp_error($result)) {
            error_log('Ошибка при удалении категории ID ' . $cat->term_id . ': ' . $result->get_error_message());
        }
    }
}

Рекомендуется запускать эту функцию вручную, например, через файл темы functions.php или в консоли WP-CLI, чтобы избежать случайного удаления важных категорий.

Пример использования функции в шаблоне

Чтобы проверить и удалить пустые категории, можно временно добавить следующий код в файл functions.php вашей темы:

add_action('init', function() {
    wp_link_ru_delete_empty_categories();
});
<

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

Оптимизация с помощью SQL-запроса для массового удаления

Если категорий много, можно использовать прямой SQL-запрос для удаления пустых категорий. Важно делать резервную копию базы данных перед выполнением любых запросов.

global $wpdb;
$sql = "DELETE t, tt FROM {$wpdb->terms} AS t
INNER JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id
LEFT JOIN (SELECT term_taxonomy_id FROM {$wpdb->term_relationships}) AS tr ON tt.term_taxonomy_id = tr.term_taxonomy_id
WHERE tt.taxonomy = 'category' AND tr.term_taxonomy_id IS NULL;";
$wpdb->query($sql);
<

Этот запрос удалит все категории, у которых отсутствуют записи (проверяется по таблице связей term_relationships).

Пояснения к SQL-запросу

  • Таблица terms содержит сами категории;
  • Таблица term_taxonomy хранит связь терминов с таксономиями;
  • Таблица term_relationships связывает записи с терминами;
  • LEFT JOIN с проверкой IS NULL позволяет найти категории без записей;
  • Удаление происходит из обеих таблиц — terms и term_taxonomy.

Полезные советы при работе с категориями в WordPress

Резервное копирование перед удалением

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

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

Если вы предпочитаете визуальные инструменты, рассмотрите плагин Clearfy Pro. Этот плагин помогает оптимизировать WordPress, в том числе управлять таксономиями и удалять пустые категории через удобный интерфейс.

Автоматизация с WP-CLI

Для опытных пользователей можно автоматизировать удаление пустых категорий с помощью WP-CLI, написав кастомный скрипт, который будет вызывать функцию wp_link_ru_delete_empty_categories() или использовать SQL-запрос.

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

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

Как сделать мультиязычность в WordPress без плагинов: практическое руководство
26.01.2026
Как создать уникальные URL для товаров в WooCommerce
08.02.2026
Оптимизация времени ответа сервера в WordPress: практические решения
18.02.2026
Как избежать повторяющихся вариаций товара в WooCommerce: практическое руководство
06.06.2026
Как изменить количество постов на странице архива WordPress
28.02.2026