WooCommerce: как автоматически удалять заказы по статусу

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

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

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

Пошаговое решение: автоматическое удаление заказов по статусу с помощью WP-Cron и кода

1. Создание функции удаления заказов

В файле functions.php вашей активной темы или в собственном плагине добавьте следующий код, который удаляет заказы с указанным статусом:

function wpstuff_delete_orders_by_status( $status = 'cancelled' ) {
    if ( ! in_array( $status, wc_get_order_statuses(), true ) ) {
        return;
    }

    $args = array(
        'status' => $status,
        'limit'  => -1,
        'return' => 'ids',
    );

    $orders = wc_get_orders( $args );
    foreach ( $orders as $order_id ) {
        wp_delete_post( $order_id, true ); // жесткое удаление
    }
}

2. Регистрация события WP-Cron для периодического удаления

Добавьте планировщик задач, который будет запускать удаление раз в сутки:

function wpstuff_schedule_order_deletion() {
    if ( ! wp_next_scheduled( 'wpstuff_daily_order_cleanup' ) ) {
        wp_schedule_event( time(), 'daily', 'wpstuff_daily_order_cleanup' );
}
}
add_action( 'wp', 'wpstuff_schedule_order_deletion' );

add_action( 'wpstuff_daily_order_cleanup', function() {
    wpstuff_delete_orders_by_status( 'cancelled' );
});

3. Альтернатива: запуск удаления по крону сервера

Если WP-Cron не срабатывает стабильно из-за низкого трафика, настройте системный cron на сервере для вызова скрипта wp-cron.php или создайте кастомный CLI-скрипт для удаления заказов.

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

  • Перейдите в WooCommerce → Заказы и фильтруйте по нужному статусу (например, "Отменённые").
  • После запуска WP-Cron (можно вызвать вручную через плагин WP Crontrol или посетив фронтенд сайта) проверьте, исчезли ли заказы с этим статусом.
  • Для отладки вставьте error_log внутри функции удаления, чтобы логировать ID удаляемых заказов.

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

  • Неверный статус заказа: Функция ничего не удалит, если передан несуществующий статус. Проверьте статус через wc_get_order_statuses().
  • Отсутствие прав на удаление: Убедитесь, что код выполняется в контексте администратора или с достаточными правами.
  • WP-Cron не запускается: Используйте плагин WP Crontrol для проверки и запуска задач вручную, либо настройте системный cron.
  • Удаляются не те заказы: Используйте фильтры в запросе wc_get_orders и проверяйте параметры.

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

  • Всегда используйте жесткое удаление wp_delete_post( $order_id, true ) с осторожностью — данные удаляются без возможности восстановления.
  • Перед удалением сделайте резервную копию базы данных, особенно если удаляете много заказов.
  • Ограничивайте количество удаляемых заказов за один запуск, если заказов очень много, чтобы избежать таймаутов.
  • Логируйте действия удаления для аудита и быстрого выявления ошибок.

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

МетодПлюсыМинусы
WP-Cron + кастомный кодГибкость, полный контроль, бесплатноЗависит от работы WP-Cron, требует навыков программирования
Плагины очистки заказов (например, "WooCommerce Delete Orders")Простота настройки, интерфейсМогут быть платными, меньше контроля
Ручное удаление через админкуБезопасно, без кодаНе подходит для больших объемов, требует времени
Как создать автоматический импорт контента в WordPress с помощью WP REST API и плагинов
05.02.2026
WooCommerce: как автоматически удалять отзывы после определённого срока
13.06.2026
Как автоматизировать присоединение пользователей к группе в WordPress
03.01.2026
Автоматическое создание копий постов в WordPress
26.12.2025
WooCommerce: автоматическое удаление отзывов после определённого срока
01.07.2026