Что такое хук 'woocommerce_order_status_changed' и зачем он нужен
Хук woocommerce_order_status_changed позволяет отследить изменение статуса заказа в WooCommerce. Это событие происходит, когда заказ переходит из одного статуса в другой, например, из "в ожидании" в "выполнен". Используя этот хук, можно автоматически запускать действия: отправлять уведомления, интегрировать с CRM, обновлять данные в базе и многое другое.
Параметры хука
Хук вызывается с четырьмя параметрами:
$order_id(int) — ID заказа;$old_status(string) — предыдущий статус;$new_status(string) — новый статус;$order(WC_Order) — объект заказа.
Пример статусов: 'pending', 'processing', 'completed', 'cancelled' и др.
Диагностика: как проверить, вызывается ли хук
Если автоматизация не срабатывает, первым делом проверяем, вызывается ли хук корректно.
Добавьте временный лог или отладочный вывод:
add_action('woocommerce_order_status_changed', function($order_id, $old_status, $new_status, $order) {
error_log("Заказ #$order_id сменил статус с $old_status на $new_status");
}, 10, 4);После смены статуса заказа проверьте файл debug.log в папке wp-content. Если сообщений нет, возможно, включена ли отладка в wp-config.php:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);Пошаговое решение: как добавить автоматическую отправку email при смене статуса на 'completed'
Задача: отправлять письмо клиенту, когда заказ становится "выполнен".
1. Добавляем обработчик в functions.php или в свой плагин
add_action('woocommerce_order_status_changed', 'send_email_on_completed', 10, 4);
function send_email_on_completed($order_id, $old_status, $new_status, $order) {
if ($new_status === 'completed') {
$to = $order->get_billing_email();
$subject = 'Ваш заказ #'.$order_id.' выполнен';
$message = 'Спасибо за покупку! Ваш заказ был успешно обработан.';
wp_mail($to, $subject, $message);
}
}2. Проверяем работу
Создайте или измените заказ в админке WooCommerce, переведите его в статус "выполнен". Проверьте почту, указанную в заказе. Если письмо не приходит, проверьте логи почты и настройку SMTP, так как функция wp_mail зависит от сервера.
Проверка результата после внедрения
- Смена статуса заказа на "completed" должна запускать отправку письма.
- Проверьте логи
debug.logна наличие ошибок. - Проверьте папку "Отправленные" на почтовом сервере или используйте SMTP плагин (например, WP Mail SMTP) для логирования.
- Если письма не приходят, проверьте спам и настройки почтового сервера.
Частые ошибки и как их исправить
- Хук не срабатывает: Возможно, неправильно указан приоритет или количество аргументов. Убедитесь, что указано
10, 4при добавлении хука. - Письма не отправляются: Проверьте работу
wp_mailотдельно, настройте SMTP. Можно использовать плагин WP Mail SMTP для диагностики. - Некорректные статусы: Статусы заказов должны быть именно такими, как у WooCommerce (
completed,processingи т.д.). Используйте функциюwc_get_order_statuses()для проверки. - Отправка дублирующихся писем: Если заказ переводится обратно и снова в "completed", письмо отправится повторно. Добавьте дополнительную проверку, если нужно.
Практические советы по безопасности и производительности
- Не выполняйте тяжелые операции внутри хука, особенно запросы к внешним API. Лучше использовать отложенные задачи через WP-Cron.
- Для отладки временно добавляйте логи, но не оставляйте их в продакшене.
- Проверяйте права пользователя, если ваши действия затрагивают административные данные.
- Используйте nonce и проверки безопасности, если добавляете AJAX-вызовы в связке с этим хуком.
Сравнение способов отправки уведомлений при смене статуса заказа
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
Хук woocommerce_order_status_changed + wp_mail |
Простота, нативность, не нужны плагины | Зависит от сервера, нет логирования | Небольшие проекты, базовая автоматизация |
| Плагин SMTP (WP Mail SMTP) + хук | Надежная отправка, логирование, поддержка SMTP | Требует настройки и дополнительного плагина | Проекты с критичной почтовой доставкой |
| Интеграция с внешними сервисами (через API) | Гибкость, расширенные возможности | Сложность реализации, задержки | Крупные проекты, CRM, маркетинг |