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

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

В интернет-магазинах на WooCommerce со временем накапливается множество заказов со статусом pending или failed, которые не были оплачены или завершены. Это может замедлять работу магазина, загромождать базу данных и влиять на отчёты. Автоматическое удаление таких заказов по расписанию помогает поддерживать базу в чистоте и улучшать производительность.

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

1. Выбор критериев для удаления

Обычно удаляют заказы со статусами pending, failed и cancelled, которые старше определённого количества дней (например, 7 дней). Такой подход позволяет не трогать актуальные заказы.

2. Использование WP-Cron для планирования задачи

WordPress имеет встроенный механизм планировщика задач — WP-Cron. Мы создадим задачу, которая будет запускаться ежедневно и удалять неактивные заказы.

3. Пример кода для functions.php или собственного плагина

if (!wp_next_scheduled('wc_delete_inactive_orders_daily')) {
    wp_schedule_event(time(), 'daily', 'wc_delete_inactive_orders_daily');
}

add_action('wc_delete_inactive_orders_daily', 'wc_delete_inactive_orders');

function wc_delete_inactive_orders() {
    $statuses_to_delete = array('pending', 'failed', 'cancelled');
    $days_old = 7; // удалять заказы старше 7 дней

    $args = array(
        'status' => $statuses_to_delete,
        'date_created' => '<' . (new WC_DateTime())->modify("-{$days_old} days")->format('Y-m-d H:i:s'),
        'limit' => -1,
        'return' => 'ids',
    );

    $orders = wc_get_orders($args);

    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // удаляем заказ и все связанные данные
    }
}

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

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

  • Создайте тестовый заказ со статусом pending и датой создания старше 7 дней (можно вручную изменить дату в базе или с помощью плагина для управления заказами).
  • Запустите WP-Cron вручную или дождитесь автоматического запуска (обычно происходит при посещении сайта). Для ручного запуска можно использовать плагин WP Crontrol.
  • Проверьте, удалён ли заказ в админке WooCommerce → Заказы.

Частые ошибки и способы их исправления

  • WP-Cron не срабатывает: WP-Cron зависит от посещений сайта. Если сайт малопосещаемый, задачи могут не запускаться. Решение — настроить системный cron на сервере для вызова wp-cron.php по расписанию.
  • Заказы не удаляются: Проверьте правильность статусов и формат даты в запросе. Также убедитесь, что функция wp_delete_post вызывается с параметром true для полного удаления.
  • Потеря данных: Удаление заказов необратимо. Рекомендуется создавать резервные копии перед включением автоматического удаления.

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

  • Не удаляйте заказы со статусами processing и completed — это активные и завершённые продажи.
  • Регулярно делайте резервные копии базы данных, особенно перед автоматической очисткой.
  • Если заказов очень много, используйте постраничную обработку, чтобы избежать превышения лимитов памяти и времени выполнения скрипта.
  • Для повышения производительности используйте плагин WP Crontrol для контроля и мониторинга задач WP-Cron.

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

МетодПлюсыМинусыКомпромисс
Ручное удаление через админку Простота, полный контроль Трудоёмко, риск пропуска Подходит для маленьких магазинов
WP-Cron с кастомным кодом Автоматизация, гибкость Зависит от посещаемости сайта, требует настройки Рекомендуется для средних магазинов
Плагины очистки заказов (например, WooCommerce Cleanup) Простота, готовые функции Может быть избыточно, нагрузка на сайт Подходит для быстрого запуска, но нужно тестировать
Как удалить все метаданные из изображений WordPress
05.12.2025
WooCommerce: как автоматически отключать товары после завершения продаж
19.06.2026
Как создать уникальный фильтр по пользователям в WordPress
26.02.2026
Автоматическое разделение длинных постов в WordPress
29.01.2026
WooCommerce: автоматическое удаление неактивных заказов по расписанию с помощью WP-Cron
19.07.2026