Как удалить записи в WordPress по условию

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

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

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

Поэтому правильным решением будет использование API WordPress — функций, которые обеспечивают нужные проверки и корректное удаление.

Важный момент — всегда делайте резервную копию базы данных перед массовыми операциями удаления.

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

Для примера рассмотрим удаление записей с пользовательским метаполем clearfy_status, значение которого равно draft, и которые были созданы более 6 месяцев назад.

Вы можете менять условия под свои задачи, используя параметры WP_Query:

  • Параметры по дате — date_query
  • Параметры таксономий — tax_query
  • Параметры метаполей — meta_query

Пример кода: удаление записей по условию с помощью WP_Query

Создадим функцию clearfy_delete_posts_by_condition(), которая выбирает записи и удаляет их программно.

function clearfy_delete_posts_by_condition() {
    // Формируем запрос
    $args = [
        'post_type' => 'post',
        'posts_per_page' => -1,
        'meta_query' => [
            [
                'key' => 'clearfy_status',
                'value' => 'draft',
                'compare' => '=',
            ],
        ],
        'date_query' => [
            [
                'before' => date('Y-m-d', strtotime('-6 months')),
            ],
        ],
        'fields' => 'ids', // Получаем только ID
    ];

    $query = new WP_Query($args);

    if (empty($query->posts)) {
        echo 'Нет записей для удаления.';
        return;
    }

    foreach ($query->posts as $post_id) {
        // Удаляем запись без перемещения в корзину
        wp_delete_post($post_id, true);
        echo "Удалена запись с ID: $post_id<br>";
    }
}

Эту функцию можно вызвать через административный скрипт или добавить в файл functions.php темы (временно для выполнения и потом удалить).

Объяснение кода и рекомендации

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

Параметр fields = 'ids' позволяет получить только ID записей, что экономит ресурсы.

Функция wp_delete_post($post_id, true) удаляет запись без помещения её в корзину. Если хотите, чтобы записи можно было восстановить, используйте false.

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

Если записей много, лучше удалять по частям. Например, по 50 записей за запуск.

function clearfy_delete_posts_batch($batch_size = 50) {
    $args = [
        'post_type' => 'post',
        'posts_per_page' => $batch_size,
        'meta_query' => [
            [
                'key' => 'clearfy_status',
                'value' => 'draft',
                'compare' => '=',
            ],
        ],
        'date_query' => [
            [
                'before' => date('Y-m-d', strtotime('-6 months')),
            ],
        ],
        'fields' => 'ids',
    ];

    $query = new WP_Query($args);

    if (empty($query->posts)) {
        echo 'Нет записей для удаления.';
        return false; // Завершаем
    }

    foreach ($query->posts as $post_id) {
        wp_delete_post($post_id, true);
        echo "Удалена запись с ID: $post_id<br>";
    }

    return true; // Есть ещё записи
}

Запускайте эту функцию циклом, например, через AJAX или WP-CLI, пока она возвращает true.

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

WP-CLI — мощный инструмент командной строки для управления WordPress.

Можно написать простое расширение или использовать встроенную команду:

wp post delete $(wp post list --post_type=post --meta_key=clearfy_status --meta_value=draft --date_query='before=6 months ago' --field=ID) --force

Эта команда удалит все посты, подходящие под условия, без помещения в корзину.

Безопасность и рекомендации

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

Заключение

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как удалить редундантные шорткоды в WordPress: практическое руководство
24.02.2026
Как удалить пустые виджеты в WordPress быстро и надежно
15.04.2026
Как оптимизировать базу данных WordPress без риска потери данных
28.12.2025
Как удалить или изменить user meta в WordPress без риска
03.03.2026
Как удалить отзывы в WordPress через AJAX без рисков
18.02.2026
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙