Автоматизация изменения статусов заказов WooCommerce через код

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

В стандартном WooCommerce статусы заказов меняются вручную или автоматически в рамках базовых сценариев (например, после оплаты). Но часто нужны кастомные автоматические переходы статусов, например, установка статуса «выполнен» через X дней после отправки, или автоматический переход в «отменён» при определённых условиях.

Если вы замечаете, что вручную менять статусы неудобно, или хочется интегрировать статусы с внешними процессами, то автоматизация через хуки и cron — оптимальное решение.

Основные хуки для управления статусами заказов в WooCommerce

Для изменения статуса заказа программно используют метод $order->update_status( $new_status, $note = '', $manual = false ). Чтобы запускать автоматизацию, применяют cron-задачи или хуки, например:

  • woocommerce_order_status_changed – вызывается при смене статуса заказа.
  • woocommerce_thankyou – срабатывает после оформления заказа, полезно для запуска таймеров.

Пример: перевод заказа в статус «выполнен» через 7 дней после отправки

Предположим, что после смены статуса на «в обработке» нужно запустить отсчёт 7 дней, по окончании которых статус автоматически перейдёт в «выполнен».

add_action('woocommerce_order_status_processing', 'schedule_order_completion');
function schedule_order_completion( $order_id ) {
    if ( ! $order_id ) return;
    wp_schedule_single_event( time() + 7 * DAY_IN_SECONDS, 'auto_complete_order', array( $order_id ) );
}

add_action('auto_complete_order', 'complete_order_callback');
function complete_order_callback( $order_id ) {
    if ( ! $order_id ) return;
    $order = wc_get_order( $order_id );
    if ( $order && $order->has_status('processing') ) {
        $order->update_status('completed', 'Автоматическое завершение заказа через 7 дней после обработки');
    }
}

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

1. Добавление функции для планирования задачи

Используйте хук смены статуса заказа, чтобы запланировать событие в WP-Cron.

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

Обработчик получает ID заказа, проверяет текущий статус и меняет на нужный.

3. Проверка и очистка запланированных задач

Чтобы избежать дублирования, перед планированием можно очистить существующие задачи для этого заказа.

add_action('woocommerce_order_status_processing', 'schedule_order_completion');
function schedule_order_completion( $order_id ) {
    if ( ! $order_id ) return;
    // Отменяем предыдущие задачи на случай повторного вызова
    wp_clear_scheduled_hook('auto_complete_order', array( $order_id ));
    wp_schedule_single_event( time() + 7 * DAY_IN_SECONDS, 'auto_complete_order', array( $order_id ) );
}

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

  • Создайте тестовый заказ и переведите его в статус «в обработке».
  • Проверьте, что в базе WP-Cron появилась запланированная задача auto_complete_order с правильным аргументом (ID заказа).
  • Через 7 дней статус заказа должен автоматически измениться на «выполнен».
  • Для тестирования можно временно уменьшить время ожидания в функции wp_schedule_single_event до нескольких минут.

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

  • Задача WP-Cron не запускается: убедитесь, что на сайте посетители заходят регулярно, или настройте системный cron для вызова wp-cron.php.
  • Несоответствие статусов: проверяйте, что в функции update_status передаётся корректный статус (например, "completed", а не "done").
  • Дублирование задач: используйте wp_clear_scheduled_hook перед планированием, чтобы не создавать несколько одинаковых событий для одного заказа.
  • Права доступа: убедитесь, что код добавлен в файл темы functions.php или в плагин, а не в файл, который не подключается.

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

  • WP-Cron зависит от посещений сайта. Для сайтов с малым трафиком лучше настроить системный cron, чтобы wp-cron.php вызывался регулярно.
  • Не запускайте тяжелые операции в cron-задачах, чтобы не перегружать сервер.
  • Проверяйте статус заказа перед сменой, чтобы избежать ошибок и конфликтов.
  • Для массовых изменений используйте WP CLI, если автоматизация через крон не подходит.

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

МетодПреимуществаНедостаткиПример
WP-Cron + PHP кодГибкость, не требует плагинов, точное управлениеЗависит от посещаемости сайта, требует знаний PHPКод из статьи
Плагины автоматизации (например, AutomateWoo)Простота настройки, UI, готовые шаблоныДополнительные расходы, нагрузка на сайтНастройка через UI
Ручное изменение статусовПростота, контрольНе масштабируемо, требует времениАдмин-панель WooCommerce
Как автоматизировать удаление неиспользуемых transient в WordPress
16.04.2026
Как автоматизировать удаление старого контента WooCommerce по дате
20.05.2026
Хук WooCommerce 'woocommerce_order_status_changed': практическое применение для автоматизации
16.05.2026
Как удалить и заблокировать подозрительных пользователей в WordPress
24.05.2026
Как автоматизировать управление ролями пользователей в WordPress с помощью кода и плагинов
12.04.2026