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

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

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

Удаление категории через админку удобно, но не всегда возможно массово или в рамках автоматизированных задач. Например, если вы создаёте плагин для импорта/экспорта или оптимизации структуры сайта, вам понадобится программный способ. Кроме того, удаление категорий программно позволяет контролировать процесс и выполнять дополнительные действия, например, переназначение постов.

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

Функции WordPress для удаления категории

Основная функция для удаления таксономии — wp_delete_term(). Категории в WordPress — это термины таксономии category. Чтобы удалить категорию, нужно знать её ID (term ID).

Пример базового кода для удаления категории по ID:

function wplog_delete_category_by_id($term_id) {
    if (!term_exists($term_id, 'category')) {
        return new WP_Error('not_found', 'Категория не существует.');
    }
    $result = wp_delete_term($term_id, 'category');
    if (is_wp_error($result)) {
        return $result;
    }
    return true;
}

Вызов функции:

$delete = wplog_delete_category_by_id(123);
if (is_wp_error($delete)) {
    echo 'Ошибка: ' . $delete->get_error_message();
} else {
    echo 'Категория успешно удалена';
}

Функция возвращает true при успешном удалении, либо объект ошибки, если категория не найдена или произошла другая проблема.

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

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

Пример функции для переназначения всех постов из удаляемой категории в другую категорию:

function wplog_reassign_posts_before_delete($old_cat_id, $new_cat_id) {
    $args = [
        'category__in' => [$old_cat_id],
        'posts_per_page' => -1,
        'post_type' => 'post',
        'fields' => 'ids',
    ];
    $posts = get_posts($args);
    foreach ($posts as $post_id) {
        wp_remove_object_terms($post_id, $old_cat_id, 'category');
        wp_set_post_categories($post_id, [$new_cat_id], true); // true для добавления к существующим
    }
}

Использование:

$old_cat_id = 123;
$new_cat_id = 1; // Обычно категория «Без рубрики» имеет ID 1
wplog_reassign_posts_before_delete($old_cat_id, $new_cat_id);
wplog_delete_category_by_id($old_cat_id);

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

Удаление категории по слагу

Иногда удобнее удалять категорию по её слагу (slug), а не ID. Вот пример функции, которая делает это:

function wplog_delete_category_by_slug($slug) {
    $term = get_term_by('slug', $slug, 'category');
    if (!$term || is_wp_error($term)) {
        return new WP_Error('not_found', 'Категория с таким слагом не найдена.');
    }
    return wplog_delete_category_by_id($term->term_id);
}

Пример вызова:

$result = wplog_delete_category_by_slug('novosti');
if (is_wp_error($result)) {
    echo $result->get_error_message();
} else {
    echo 'Категория успешно удалена';
}

Безопасность и проверка прав

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

Пример проверки в функции:

function wplog_secure_delete_category($term_id) {
    if (!current_user_can('manage_categories')) {
        return new WP_Error('forbidden', 'У вас нет прав для удаления категорий.');
    }
    return wplog_delete_category_by_id($term_id);
}

Резюме и рекомендации

Удаление категории через код — мощный инструмент для автоматизации и кастомизации WordPress, но требует внимательности. Важно:

  • Сначала переназначать посты в другую категорию, чтобы не потерять связь.
  • Проверять существование категории перед удалением.
  • Проверять права пользователя для безопасности.
  • Обрабатывать ошибки и информировать пользователя.

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

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

Как избежать замедлений WordPress при большом количестве записей
11.02.2026
Ограничение количества категорий для постов в WordPress: практическое руководство
24.01.2026
Как оптимизировать загрузку WordPress без плагинов
24.11.2025
Как использовать хуки в WordPress для автоматизации задач
21.11.2025
Как сделать собственный виджет в WordPress с примером кода
07.12.2025