Что такое хук woocommerce_order_status_changed и когда он срабатывает
Хук woocommerce_order_status_changed — это action-хук WooCommerce, который вызывается при изменении статуса заказа. Он передает четыре параметра: ID заказа, старый статус, новый статус и объект заказа WC_Order. Этот хук идеально подходит для запуска автоматических процессов, например, отправки уведомлений, изменения метаданных заказа, интеграции с внешними сервисами и т.п.
Сигнатура хука
do_action( 'woocommerce_order_status_changed', $order_id, $old_status, $new_status, $order );Диагностика задачи: зачем и как использовать хук для автоматизации
Допустим, нужно автоматически отправлять кастомное письмо клиенту, когда заказ переходит в статус completed, или создавать задачу в CRM при смене статуса на processing. Часто владельцы WooCommerce сталкиваются с задачей добавить такие действия без изменения ядра и плагинов.
Проверить, что хук срабатывает, можно с помощью простого логирования:
add_action('woocommerce_order_status_changed', function($order_id, $old_status, $new_status, $order) {
error_log("Order #$order_id changed from $old_status to $new_status");
}, 10, 4);После смены статуса заказа в логах сервера появится запись. Если записи нет — значит хук не сработал, либо код подключен неправильно.
Пошаговое решение: пример автоматизации отправки кастомного письма при смене статуса на completed
- Вставьте следующий код в файл
functions.phpвашей темы или в отдельный плагин:
add_action('woocommerce_order_status_changed', 'send_custom_email_on_completed', 10, 4);
function send_custom_email_on_completed($order_id, $old_status, $new_status, $order) {
if ($new_status === 'completed') {
$to = $order->get_billing_email();
$subject = 'Спасибо за покупку! Ваш заказ завершен';
$message = 'Здравствуйте, ваш заказ #' . $order_id . ' успешно выполнен.';
wp_mail($to, $subject, $message);
}
}completed.Проверка результата после внедрения
- Отслеживайте логи PHP для ошибок при отправке почты (например, в
error_logили через плагин Debug Bar). - Проверьте, что письмо приходит именно при нужной смене статуса, а не при других.
- Убедитесь, что при смене статуса на что-то другое письмо не отправляется.
Частые ошибки и как их исправить
- Код не выполняется: Проверьте, что код подключен и активен. Лучше использовать отдельный плагин для кастомных функций, чтобы избежать потери при смене темы.
- Почта не приходит: Настройте SMTP в WordPress, используйте плагины типа WP Mail SMTP. Проверьте, не блокирует ли почтовый сервер отправку.
- Неверный статус: Используйте точное сравнение
$new_status === 'completed', потому что статусы всегда в нижнем регистре. - Параметры хука заданы неверно: Укажите число параметров (4) в add_action, иначе получите ошибку или пропустите параметры.
Практические советы по безопасности и производительности
- Не отправляйте тяжелые запросы (например, к API) напрямую в хук, используйте очередь задач или WP Cron.
- Фильтруйте и валидируйте данные заказа, не доверяйте входящим параметрам без проверки.
- Ограничьте права доступа к функции, если вызываете её из других мест.
- Используйте транзиенты или кэширование для уменьшения нагрузки, если ваша автоматизация требует частых проверок.
Альтернативы и сравнение методов автоматизации смены статусов
| Метод | Преимущества | Недостатки | Пример использования |
|---|---|---|---|
Хук woocommerce_order_status_changed |
Гибко, напрямую в коде, полный доступ к объекту заказа | Требует программирования, возможна нагрузка при тяжелых операциях | Отправка кастомных уведомлений, интеграция с CRM |
| Плагины автоматизации (например, AutomateWoo) | Графический интерфейс, без кода | Часто платные, меньше гибкости | Стандартные сценарии уведомлений и действий |
| WP-Cron задачи | Отложенное выполнение, уменьшение нагрузки | Не всегда точное время срабатывания | Обработка массовых заказов или периодические проверки |