Что такое хук 'woocommerce_order_status_changed' и зачем он нужен
Хук woocommerce_order_status_changed вызывается в WooCommerce при изменении статуса заказа. Он предоставляет возможность запускать кастомные функции, реагирующие на смену статуса, что полезно для автоматизации уведомлений, интеграций, обновления данных и других бизнес-процессов.
Параметры хука
Хук срабатывает с передачей следующих параметров:
$order_id— ID заказа;$old_status— старый статус заказа (например, 'pending', 'processing');$new_status— новый статус заказа (например, 'completed', 'cancelled');$order— объект заказа WC_Order.
Диагностика проблемы: автоматизация уведомлений при смене статуса
Часто нужно отправлять кастомные email-уведомления клиентам или менеджерам при конкретных сменах статуса, например, когда заказ переходит в 'completed'. Без использования этого хука приходится вручную проверять заказы и отправлять сообщения, что неудобно и чревато ошибками.
Если уведомления не срабатывают, проверьте:
- Подключён ли хук в файле
functions.phpили в плагине; - Правильно ли обрабатываются параметры;
- Не блокирует ли отправку почты другой плагин;
- Логи ошибок PHP и WooCommerce.
Пошаговое решение: простой пример автоматизации email при смене статуса
1. Добавьте следующий код в functions.php вашей темы или в отдельный плагин:
add_action('woocommerce_order_status_changed', 'send_custom_email_on_status_change', 10, 4);
function send_custom_email_on_status_change($order_id, $old_status, $new_status, $order) {
// Отправлять письмо только при переходе в статус completed
if ($new_status === 'completed') {
$to = $order->get_billing_email();
$subject = 'Ваш заказ #' . $order_id . ' выполнен';
$message = 'Спасибо за покупку! Ваш заказ был успешно выполнен.';
wp_mail($to, $subject, $message);
}
}
2. Сохраните изменения, обновите страницу администратора WooCommerce.
Расширенный пример: отправка уведомления в Telegram при отмене заказа
add_action('woocommerce_order_status_changed', 'notify_telegram_on_cancelled', 10, 4);
function notify_telegram_on_cancelled($order_id, $old_status, $new_status, $order) {
if ($new_status === 'cancelled') {
$bot_token = 'ВАШ_TELEGRAM_BOT_TOKEN';
$chat_id = 'ВАШ_CHAT_ID';
$message = 'Заказ #' . $order_id . ' был отменён.';
$url = "https://api.telegram.org/bot{$bot_token}/sendMessage?chat_id={$chat_id}&text=" . urlencode($message);
wp_remote_get($url);
}
}
Проверка результата
Для проверки, что автоматизация сработала:
- Создайте тестовый заказ;
- Измените статус заказа вручную через админ-панель WooCommerce;
- Проверьте получение email или уведомления в Telegram;
- Проверьте логи почты или ответ API Telegram (при необходимости добавьте логирование в функцию).
Частые ошибки и как их исправить
- Письмо не отправляется: проверьте настройки SMTP, убедитесь, что
wp_mailработает, нет конфликтов с плагинами почты. - Хук не срабатывает: убедитесь, что код подключен и нет синтаксических ошибок, правильный приоритет у хука.
- Неверные статусы: используйте только официальные статусы WooCommerce ('pending', 'processing', 'completed', 'cancelled', 'refunded', 'failed').
- Проблемы с API Telegram: проверьте правильность токена и chat_id, убедитесь, что сервер может делать внешние HTTP-запросы.
Практические советы по безопасности и производительности
- Выносите такой код в отдельный плагин, чтобы не потерять при обновлении темы.
- Обрабатывайте ошибки при отправке почты или запросов к внешним API, избегайте фатальных ошибок.
- Не выполняйте тяжелые операции внутри хука, чтобы не замедлять страницу изменения заказа.
- Для сложных задач используйте WP-Cron для отложенной обработки.
Сравнение способов автоматизации уведомлений
| Метод | Преимущества | Недостатки |
|---|---|---|
| Хук 'woocommerce_order_status_changed' | Прямой доступ к заказу, универсальность, полный контроль | Требует навыков программирования |
| Плагины уведомлений | Простота настройки, готовые шаблоны | Ограниченная гибкость, возможные конфликты |
| Внешние сервисы (Zapier, Integromat) | Мощная интеграция, no-code | Зависимость от сторонних сервисов, задержки |