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

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

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

Как найти заказы WooCommerce по дате и статусу

Для начала нужно идентифицировать, какие именно заказы подлежат удалению. WooCommerce хранит заказы как пользовательские типы записей shop_order. Статусы заказов хранятся как таксономия shop_order_status (например, wc-completed, wc-cancelled, wc-pending).

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

$args = [
    'post_type' => 'shop_order',
    'post_status' => 'wc-cancelled', // или массив статусов
    'date_query' => [
        [
            'after'     => '2023-01-01',
            'before'    => '2023-03-31',
            'inclusive' => true,
        ],
    ],
    'posts_per_page' => -1,
];
$query = new WP_Query($args);

Так можно получить список ID заказов, подходящих под критерии.

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

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

function get_orders_to_delete($status, $date_after, $date_before) {
    $args = [
        'post_type' => 'shop_order',
        'post_status' => $status,
        'date_query' => [
            [
                'after'     => $date_after,
                'before'    => $date_before,
                'inclusive' => true,
            ],
        ],
        'posts_per_page' => -1,
        'fields' => 'ids',
    ];
    $query = new WP_Query($args);
    return $query->posts;
}

Шаг 2. Удаляем заказы через wp_delete_post()

function delete_orders_by_ids(array $order_ids) {
    foreach ($order_ids as $order_id) {
        // true — удаление без возможности восстановления
        wp_delete_post($order_id, true);
    }
}

Шаг 3. Используем вместе

$orders_to_delete = get_orders_to_delete('wc-cancelled', '2023-01-01', '2023-03-31');
delete_orders_by_ids($orders_to_delete);

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

Проверка результата: как убедиться, что заказы удалены

  • Зайдите в раздел WooCommerce > Заказы и убедитесь, что заказы с указанными статусами и датами отсутствуют.
  • Повторите запрос WP_Query с теми же параметрами — если возвращается пустой массив, значит удаление прошло успешно.
  • Проверьте базу данных (таблица wp_posts, поле post_type = shop_order) через phpMyAdmin или WP-CLI — заказы должны отсутствовать.

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

  • Заказы не удаляются полностью: иногда заказы связаны с метаданными и записями в таблицах WooCommerce. Используйте wp_delete_post($order_id, true) с вторым параметром true для полного удаления.
  • Недостаточно прав у пользователя: убедитесь, что код запускается от имени администратора или с правами на удаление записей.
  • Неправильный статус заказа: статусы WooCommerce всегда начинаются с wc-. Например, отменённый заказ — wc-cancelled, завершённый — wc-completed. Если указать просто cancelled, заказы не найдутся.
  • Проблемы с датами: формат даты должен быть ГГГГ-ММ-ДД. Для большей точности можно использовать DateTime объекты.

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

  • Резервное копирование: обязательно сделайте бэкап базы перед массовым удалением заказов.
  • Используйте WP-CLI: если заказов много, запуск через консоль WordPress WP-CLI удобнее и быстрее, чем через веб-интерфейс.
  • Пакетная обработка: если заказов слишком много, разбивайте удаление на части (например, по 100 заказов), чтобы избежать превышения времени выполнения скрипта.
  • Логирование: ведите лог ID удалённых заказов, чтобы при необходимости можно было восстановить информацию.

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

СпособПлюсыМинусы
Через пользовательский код (WP_Query + wp_delete_post)Полный контроль, можно фильтровать по дате, статусу, метаполямТребуется программирование, риск ошибки без бэкапа
Через плагины массового удаления заказовУдобный интерфейс, не требует кодаОграниченные фильтры, могут не поддерживать сложные выборки
Через WP-CLIБыстро, можно запускать в командной строке, подходит для больших объёмовТребует доступа к серверу и понимания консоли
Как создать автоматические уведомления в WordPress по событиям с помощью WPRemark
04.03.2026
Удаление заказов WooCommerce по клиенту и периоду через код
24.05.2026
Удаление продаж WooCommerce по дате и статусу: практическое руководство
03.05.2026
Как создать автоматические ответы в комментариях WordPress
30.12.2025
Как установить Redis кэш в WordPress и настроить его правильно
03.02.2026