WooCommerce: Автоматическое изменение статуса заказа по расписанию

|

Диагностика задачи: зачем нужно автоматическое изменение статуса заказа

На крупных WooCommerce-магазинах нередко требуется менять статус заказов автоматически: например, переводить оплаченные заказы в статус "выполнен" через несколько дней после оплаты, если товар отгружен, или закрывать заказы, которые долго не обрабатываются. Ручное управление становится неудобным и подвержено ошибкам.

Типичные признаки необходимости автоматизации:

Пошаговое решение: как настроить автоматическое изменение статуса заказов

1. Создание WP-Cron задачи для периодической проверки заказов

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

add_action('wp', function() {
    if (!wp_next_scheduled('auto_change_order_status_hourly')) {
        wp_schedule_event(time(), 'hourly', 'auto_change_order_status_hourly');
    }
});

2. Создание функции, которая будет менять статусы заказов

В функции проверяем заказы со статусом processing, дата которых старше заданного порога, и меняем их статус на completed.

add_action('auto_change_order_status_hourly', function() {
    $args = [
        'limit' => -1,
        'status' => 'processing',
        'date_modified' => '<' . (new WC_DateTime())->modify('-3 days')->format('Y-m-d H:i:s'),
    ];

    $orders = wc_get_orders($args);

    foreach ($orders as $order) {
        $order->update_status('completed', 'Автоматическое обновление статуса заказа спустя 3 дня.');
    }
});

В данном примере мы меняем статус заказов, находящихся в обработке более 3 дней.

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

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

  1. Создайте тестовый заказ со статусом processing и измените дату последнего обновления заказа в базе (например, через phpMyAdmin), установив её более чем на 3 дня назад.
  2. Подождите, пока wp-cron сработает (можно принудительно вызвать wp cron event run --due-now при наличии WP-CLI).
  3. Проверьте, что статус заказа изменился на completed и в примечаниях появился комментарий от скрипта.

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

$args = [
    'limit' => -1,
    'status' => 'processing',
    'date_modified' => [
        'before' => (new WC_DateTime())->modify('-3 days')->format('Y-m-d H:i:s'),
    ],
];
$orders = wc_get_orders($args);

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

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

СпособПлюсыМинусыКогда использовать
WP-Cron с PHP-кодомГибкость, полное управление процессом, не требует сторонних плагиновЗависит от посещаемости сайта, нагрузка при большом числе заказовСредние и крупные проекты с разработчиками
Плагины автоматизации (например, AutomateWoo)Простота настройки, поддержка бизнес-логики без кодаПлатные, могут нагружать сайт, ограничены функционаломМалый бизнес и маркетологи без навыков программирования
Внешние скрипты и вебхукиМаксимальная масштабируемость, интеграция с CRM и ERPСложность настройки, требуется внешний серверБольшие проекты с интеграциями
Как добавить настройки в регистрацию WordPress с подтверждением email
08.02.2026
Как использовать вложенное меню в WordPress с помощью пакета WP Premium
02.12.2025
Как сделать динамические шорткоды WordPress: примеры и практические решения
13.11.2025
WooCommerce: как устроить автоперенаправление после оформления заказа
29.06.2026
WooCommerce: автоматическое удаление неактивных корзин и заказов
18.05.2026
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙