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

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

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

Удаление записей выборочно помогает поддерживать актуальность контента, освобождать место в базе данных и улучшать производительность сайта. Например, вы можете захотеть удалить все записи из категории «Новости» старше двух лет или записи с определённым мета-значением, которое больше не актуально.

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

Удаление записей из категории по дате публикации: пример кода

Рассмотрим пример функции, которая удаляет все записи из категории с указанным слагом, опубликованные до определённой даты. Функция будет использовать WP_Query для выборки и wp_delete_post для удаления.

function wpcourse_delete_posts_by_category_and_date($category_slug, $date_before) {
    $args = [
        'category_name' => $category_slug,
        'date_query' => [
            [
                'before' => $date_before,
                'inclusive' => true,
            ],
        ],
        'posts_per_page' => -1,
        'post_type' => 'post',
        'fields' => 'ids',
    ];

    $query = new WP_Query($args);

    if (!empty($query->posts)) {
        foreach ($query->posts as $post_id) {
            wp_delete_post($post_id, true); // true — удаление без перехода в корзину
        }
        return count($query->posts);
    }
    return 0;
}

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

$deleted_count = wpcourse_delete_posts_by_category_and_date('novosti', '2022-01-01');
echo "Удалено записей: " . $deleted_count;

Этот код безопасно удалит все записи категории «novosti», опубликованные до 1 января 2022 года.

Удаление записей по мета-полю в категории

Если нужно удалить записи с определённым пользовательским полем (мета-полем) в категории, можно расширить запрос WP_Query с параметром meta_query.

function wpcourse_delete_posts_by_category_and_meta($category_slug, $meta_key, $meta_value) {
    $args = [
        'category_name' => $category_slug,
        'meta_query' => [
            [
                'key' => $meta_key,
                'value' => $meta_value,
                'compare' => '=',
            ],
        ],
        'posts_per_page' => -1,
        'post_type' => 'post',
        'fields' => 'ids',
    ];

    $query = new WP_Query($args);

    if (!empty($query->posts)) {
        foreach ($query->posts as $post_id) {
            wp_delete_post($post_id, true);
        }
        return count($query->posts);
    }
    return 0;
}

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

$deleted_count = wpcourse_delete_posts_by_category_and_meta('aktsii', 'promo_active', '0');
echo "Удалено записей с неактивным промо: " . $deleted_count;

Таким образом, удаляются все записи из категории «aktsii», где мета-поле promo_active равно 0.

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

Для тех, кто предпочитает графический интерфейс, подойдут плагины, которые позволяют удалять записи массово по фильтрам. Вот несколько полезных:

  • Bulk Delete — плагин с широкими возможностями фильтрации и удаления записей по категориям, мета-полям, датам и другим атрибутам. Поддерживает автоматизацию через cron.
  • WP Bulk Delete — похожий по функционалу, с удобным интерфейсом и возможностью удалять записи по типам, таксономиям и пользовательским полям.

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

Рекомендации по безопасности и производительности

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

  • Перед удалением сделайте резервную копию базы данных.
  • Для больших объёмов записей используйте пакетную обработку — удаляйте записи порциями, чтобы избежать таймаутов.
  • Если используете код, выполняйте его в административной панели или через WP-CLI для удобства и безопасности.
  • Проверяйте, что удаляете именно нужные записи, выводя их ID или заголовки перед удалением.

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

function wpcourse_delete_posts_batch($category_slug, $meta_key, $meta_value, $batch_size = 50) {
    $args = [
        'category_name' => $category_slug,
        'meta_query' => [
            [
                'key' => $meta_key,
                'value' => $meta_value,
                'compare' => '=',
            ],
        ],
        'posts_per_page' => $batch_size,
        'post_type' => 'post',
        'fields' => 'ids',
    ];

    $query = new WP_Query($args);
    if (empty($query->posts)) {
        return 0;
    }

    foreach ($query->posts as $post_id) {
        wp_delete_post($post_id, true);
    }

    return count($query->posts);
}

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

Заключение

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

Если вы хотите упростить задачу, обратите внимание на плагин Bulk Delete на wpshop.ru — он отлично подходит для массового удаления записей с гибкими фильтрами.

Как отключить возможность изменения адреса доставки в WooCommerce после оформления заказа
12.05.2026
Как изменить URL страницы регистрации WordPress без плагинов
07.12.2025
Автоматическое изменение статуса заказа в WooCommerce по срокам оплаты
27.05.2026
Почему в WooCommerce не отправляются письма о заказах и как это исправить
17.04.2026
Как удалить неиспользуемые шорткоды в WordPress
24.02.2026

Хотите научиться создавать сайты и зарабатывать на этом от 30 000 рублей в месяц?

Записаться на курс сейчас