Как удалить все продажи WooCommerce по дате и статусу

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

В WooCommerce иногда возникает задача удалить заказы по определённым критериям — например, по дате оформления или статусу (отменённые, ожидающие оплаты, обработанные и т.д.). Причины могут быть разные: очистка тестовых заказов после отладки, удаление старых или неактуальных продаж для оптимизации базы данных, исправление ошибок импорта и пр.

Стандартный интерфейс WooCommerce не предусматривает массового удаления заказов с фильтрацией по дате и статусу, поэтому приходится использовать код или сторонние плагины.

Как определить нужные заказы для удаления

Для начала нужно точно определить параметры выборки заказов:

  • Дата: период создания заказа (например, до 1 января 2023 года)
  • Статус заказа: список статусов, например, 'cancelled', 'failed', 'pending'

Используем WP_Query с параметрами post_type = 'shop_order', post_status и фильтрацией по дате.

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

1. Создаём WP_Query для выборки заказов

$args = [
    'post_type'      => 'shop_order',
    'posts_per_page' => -1, // все заказы
    'post_status'    => ['wc-cancelled', 'wc-failed', 'wc-pending'],
    'date_query'     => [
        [
            'before' => '2023-01-01',
            'inclusive' => true,
        ],
    ],
    'fields'         => 'ids', // получаем только ID
];
$query = new WP_Query($args);

2. Удаляем заказы по ID

if ( ! empty($query->posts) ) {
    foreach ( $query->posts as $order_id ) {
        wp_delete_post( $order_id, true ); // true - принудительное удаление без перемещения в корзину
    }
}

3. Встраиваем вызов в админку или запускаем через wp-cli

Для безопасности лучше не запускать код напрямую. Можно сделать админскую страницу с кнопкой для запуска удаления или использовать WP-CLI команду:

wp post delete $(wp post list --post_type=shop_order --post_status=wc-cancelled,wc-failed,wc-pending --date_query_before=2023-01-01 --format=ids) --force

Обратите внимание, что параметров date_query в WP-CLI нет по умолчанию, поэтому удобнее писать кастомный скрипт или плагин.

Проверка результата после внедрения

  • Перейдите в WooCommerce > Заказы и примените фильтр по статусам и дате — записи должны отсутствовать
  • Проверьте базу данных (таблица wp_posts) на наличие постов с post_type = 'shop_order' и соответствующими статусами и датами
  • Убедитесь, что связанные метаданные и записи (например, в wp_postmeta) удалились автоматически

Частые ошибки и как их исправить

  • Ошибка: Заказы не удаляются полностью, остались метаданные.
    Решение: Используйте wp_delete_post( $order_id, true ) с принудительным удалением, чтобы удалить все связанные данные.
  • Ошибка: WP_Query не возвращает заказы с нужным статусом.
    Решение: В WooCommerce статусы заказов хранятся с префиксом wc-, например, wc-completed. Убедитесь, что вы используете правильные значения в параметре post_status.
  • Ошибка: Память или время выполнения PHP заканчиваются при большом количестве заказов.
    Решение: Делайте удаление пакетами — например, по 100 заказов за один запрос, используя пагинацию в WP_Query.

Практические советы по безопасности и производительности

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

Сравнение способов удаления заказов по дате и статусу

МетодПреимуществаНедостатки
Код на PHP (WP_Query + wp_delete_post)Гибкость, можно встроить в плагин или тему, автоматизацияТребует навыков программирования, риск ошибок при неправильной реализации
Плагины массового удаления заказовПростота использования, готовые интерфейсыМогут быть платными, не всегда поддерживают фильтрацию по дате
WP-CLIВысокая скорость, подходит для больших объёмов, запускается из консолиТребует доступа к серверу и навыков работы с командной строкой
Как создать адаптивные блоки в WordPress Gutenberg
02.12.2025
Автоматическое изменение заголовков постов WordPress по заданным правилам
11.03.2026
Как установить Redis кэш в WordPress и настроить его правильно
03.02.2026
Как использовать REST API для автоматического управления пользователями в WordPress
18.01.2026
Как избежать проблем с совместимостью плагинов WooCommerce
26.04.2026