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

|

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

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

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

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

Варианты удаления:

Удаление постов из категории через PHP: пошаговый пример

Рассмотрим функцию, которая по ID категории удалит все записи, в неё входящие. Код можно вставить в файл functions.php вашей темы или создать кастомный плагин.

function wpreboot_delete_posts_by_category($category_id) {
    if (!current_user_can('delete_posts')) {
        return 'Нет прав для удаления постов';
    }

    $args = array(
        'category' => $category_id,
        'posts_per_page' => -1,
        'post_type' => 'post',
        'post_status' => 'any'
    );

    $posts = get_posts($args);

    if (empty($posts)) {
        return 'Посты в категории не найдены';
    }

    $deleted_count = 0;

    foreach ($posts as $post) {
        // Полное удаление с обходом корзины
        wp_delete_post($post->ID, true);
        $deleted_count++;
    }

    return "Удалено постов: $deleted_count";
}

// Пример вызова
// echo wpreboot_delete_posts_by_category(12); // где 12 — ID категории

Объяснение:

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

Удаление через WP-CLI: быстро и удобно

Если у вас есть доступ к серверу и установлен WP-CLI, это самый надёжный и быстрый способ.

Команда для удаления всех постов категории с ID 12:

wp post delete $(wp post list --category=12 --field=ID) --force

Объяснение:

Преимущества WP-CLI:

Что делать, если нужно удалить посты по названию категории или слагу

Вместо ID, можно получить ID категории программно по слагу или имени:

function wpreboot_get_category_id_by_slug($slug) {
    $category = get_category_by_slug($slug);
    return $category ? $category->term_id : 0;
}

// Пример использования
$cat_id = wpreboot_get_category_id_by_slug('novosti');
if ($cat_id) {
    echo wpreboot_delete_posts_by_category($cat_id);
} else {
    echo 'Категория не найдена';
}

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

Рекомендации и меры предосторожности

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

Хотя ручной код и WP-CLI — лучшие варианты для разработчиков, можно рассмотреть плагины, которые упрощают управление постами по категориям:

Но если нужна именно функция массового удаления по категории — лучше использовать кастомный код или WP-CLI.

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

Установка и настройка WPRemark для автоматического комментирования в WordPress
03.02.2026
WooCommerce: автоматическое удаление просмотренных товаров из корзины
30.04.2026
Как удалить и заблокировать неиспользуемые посты в WordPress: практическое руководство
12.12.2025
Как сделать автоматическое удаление простых категорий в WordPress по условию
05.03.2026
Как избежать конфликтов между плагинами WordPress: практические советы и примеры
09.12.2025
×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙