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

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

Отмена заказов в WooCommerce часто приводит к накоплению большого количества записей с статусом cancelled, которые не нужны для дальнейшей аналитики или обработки. Это замедляет работу базы данных и усложняет администрирование магазина. Автоматическое удаление таких заказов помогает поддерживать чистоту базы и улучшить производительность.

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

Чтобы убедиться, что отменённые заказы не удаляются автоматически:

  • Откройте админ-панель WooCommerce → Заказы и отфильтруйте заказы со статусом Отменён.
  • Посмотрите, сколько таких заказов накопилось.
  • Проверьте, не очищаются ли они вручную или с помощью плагинов.
  • Убедитесь, что в настройках WooCommerce или плагинов нет автоматического удаления отменённых заказов (по умолчанию WooCommerce этого не делает).

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

Для автоматического удаления заказов со статусом cancelled через определённый промежуток времени добавим кастомную WP-Cron задачу.

1. Регистрация Cron задачи

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

2. Обработчик очистки заказов

add_action('wpplugin_cleanup_cancelled_orders_hook', 'wpplugin_cleanup_cancelled_orders');
function wpplugin_cleanup_cancelled_orders() {
    $args = [
        'status' => 'cancelled',
        'limit' => -1,
        'return' => 'ids',
        'date_modified' => '<' . date('Y-m-d H:i:s', strtotime('-7 days')),
    ];
    $orders = wc_get_orders($args);
    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // true - удалить без возможности восстановления
    }
}

В данном примере удаляем отменённые заказы старше 7 дней. Это можно настроить под свои нужды.

Как проверить, что автоматическое удаление работает

  • Создайте тестовый заказ в WooCommerce, отмените его.
  • Измените дату отмены заказа в базе (или подождите 7 дней).
  • Вручную запустите крон-задачу через плагин типа WP Crontrol или с помощью WP-CLI: wp cron event run wpplugin_cleanup_cancelled_orders_hook.
  • Проверьте, что заказ удалился из админки.

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

  • Ошибка: Задача WP-Cron не запускается из-за низкой активности сайта.
    Решение: Настройте системный cron для запуска wp-cron.php или используйте плагин для имитации cron.
  • Ошибка: Заказы не удаляются, потому что wp_delete_post вызывается с $force_delete = false.
    Решение: Убедитесь, что вторым параметром стоит true — принудительное удаление без помещения в корзину.
  • Ошибка: Не учитывается дата отмены заказа.
    Решение: Используйте параметр date_modified в wc_get_orders для фильтрации по дате изменения статуса.

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

  • Не удаляйте заказы слишком быстро — оставляйте временной буфер (например, 7 дней) для возможного восстановления или аудита.
  • Перед удалением можно создать резервную копию базы данных или экспортировать отменённые заказы.
  • Для больших магазинов ограничьте количество обрабатываемых заказов за один запуск, чтобы избежать таймаута.
  • Проверьте совместимость с плагинами, которые могут работать с заказами (например, CRM, бухгалтерия).

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

МетодПлюсыМинусыПример использования
WP-Cron с кастомным кодомГибкость, полный контроль, не требует сторонних плагиновЗависит от активности сайта, требует навыков PHPКод из статьи
Плагин автоматической очистки заказовПростота установки и настройкиМеньше контроля, возможные конфликтыWooCommerce Order Status Manager с настройками удаления
Ручное удаление через админкуПрямой контроль, без кодаТрудозатратно, не автоматичноАдминка WooCommerce → Заказы
Как использовать функцию wp_enqueue_script для добавления собственных скриптов в WordPress
26.04.2026
Как избежать конфликтов между WooCommerce и плагинами: практическое руководство
26.05.2026
Автоматическая регистрация пользователей с подтверждением по email в WordPress
26.12.2025
Как удалить заблокированные или оставшиеся очистки в WooCommerce без ошибок
29.05.2026
Как добавить автоматический отзыв на страницу товара WooCommerce с помощью AJAX
23.03.2026