WooCommerce: использование хука woocommerce_order_status_changed для автоматизации процессов

Что такое хук woocommerce_order_status_changed и зачем он нужен

Хук woocommerce_order_status_changed вызывается при изменении статуса заказа в WooCommerce. Это универсальное событие, которое позволяет запускать кастомные функции в момент перехода заказа из одного статуса в другой, например, из «в обработке» в «завершён». С его помощью можно автоматизировать задачи, связанные с обработкой заказов, уведомлениями, интеграцией с внешними системами и т.д.

Диагностика проблем с автоматизацией на основе статусов заказов

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

  • Хук вызывается, но функция не подключена или подключена с ошибками
  • Неверно переданы параметры функции-обработчика
  • Конфликты с другими плагинами, которые перехватывают или изменяют статус без вызова стандартного хука
  • Кэширование и оптимизация, блокирующие выполнение PHP-кода (например, объектный кэш)

Пошаговое решение: как правильно использовать хук woocommerce_order_status_changed

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

add_action('woocommerce_order_status_changed', 'wpboard_handle_order_status_change', 10, 4);
function wpboard_handle_order_status_change($order_id, $old_status, $new_status, $order) {
    // Проверяем необходимые статусы
    if ($old_status === 'processing' && $new_status === 'completed') {
        // Ваша логика при переходе из processing в completed
        error_log("Заказ #$order_id изменил статус с $old_status на $new_status");
        // Пример: отправка кастомного письма
        wpboard_send_custom_email($order);
    }
}

function wpboard_send_custom_email($order) {
    $to = $order->get_billing_email();
    $subject = 'Ваш заказ завершён';
    $message = 'Спасибо за покупку! Ваш заказ #' . $order->get_id() . ' успешно обработан.';
    wp_mail($to, $subject, $message);
}

2. Тестирование и отладка

Для проверки работоспособности добавьте error_log или используйте xDebug. Перейдите в админке WooCommerce в заказы и поменяйте статус заказа вручную. В логах PHP должны появиться записи с ID заказа и информацией о смене статуса.

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

  • Измените статус заказа из «в обработке» на «завершён» (processing → completed) вручную
  • Проверьте логи сервера (обычно error.log или debug.log) на наличие сообщений, которые вы выводите из обработчика
  • Проверьте, что кастомное письмо или другая логика отработали (например, письмо пришло на почту клиента)

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

  • Обработчик не вызывается
    Проверьте, что код с add_action подключён и выполняется. Иногда используется неправильное имя хука или приоритет. Используйте приоритет 10 и 4 аргумента.
  • Неправильные параметры функции
    Хук передаёт 4 аргумента: $order_id, $old_status, $new_status, $order. Убедитесь, что функция принимает их все и в правильном порядке.
  • Проблемы с кэшированием
    Если используется объектный кэш или плагины оптимизации, временно отключите их при отладке, чтобы убедиться, что код выполняется.
  • Неверные значения статусов
    Статусы должны быть в формате WooCommerce: например, 'processing', 'completed', 'on-hold'. Проверьте их через var_dump или в документации WooCommerce.

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

  • Избегайте выполнения тяжёлых операций внутри обработчика, чтобы не замедлять работу сайта. Лучше ставьте задачи в очередь или используйте WP-Cron.
  • Проверяйте права доступа и валидируйте данные, особенно если отправляете запросы во внешние сервисы.
  • Логируйте ошибки и успешные операции для последующего аудита, но не оставляйте логи в продакшене без необходимости.
  • Если отправляете письма, используйте SMTP или специализированные сервисы, чтобы избежать попадания в спам.

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

МетодПлюсыМинусыКогда использовать
Хук woocommerce_order_status_changedПрямой контроль, простота интеграцииМожет замедлить заказ при тяжёлых операцияхДля мгновенной реакции на смену статуса
WP-Cron с проверкой статусовПозволяет выполнять задачи асинхронноЗадержка из-за расписания, сложнее отладитьДля длительных процессов или периодических проверок
Вебхуки WooCommerceПодходит для интеграции с внешними сервисамиЗависимость от внешнего сервиса, требует настройкиДля синхронизации с CRM, ERP и т.п.
Как отключить AJAX в WooCommerce для улучшения производительности
27.03.2026
Как исправить ошибку «Не открывается корзина WooCommerce»: практическое руководство
30.06.2026
Как сделать автоматическое сохранение изменений в WordPress для кастомных типов записей
18.01.2026
Как удалить варианты товаров WooCommerce по условию через код
23.05.2026
Как отладить проблемы с загрузкой плагинов в WordPress
23.02.2026