Диагностика проблемы: почему стандартных уведомлений WooCommerce недостаточно
WooCommerce по умолчанию отправляет уведомления покупателю и администратору при изменении статуса заказа. Однако в ряде случаев требуется отправлять дополнительные уведомления, например, сторонним службам, менеджерам или CRM. Если вы не видите нужных уведомлений или хотите расширить функционал, правильная работа с хуком woocommerce_order_status_changed — ключ к решению.
Пошаговое решение: добавляем дополнительное уведомление на изменение статуса заказа
1. Подключение к хуку
Хук woocommerce_order_status_changed срабатывает при любом изменении статуса заказа и передаёт 4 параметра:
$order_id— ID заказа;$old_status— предыдущий статус;$new_status— новый статус;$order— объект WC_Order.
Пример подключения при помощи функции в файле functions.php вашей темы или в собственном плагине:
add_action('woocommerce_order_status_changed', 'send_custom_order_status_notification', 10, 4);
function send_custom_order_status_notification($order_id, $old_status, $new_status, $order) {
// Логика уведомления здесь
}2. Логика отправки уведомления
Допустим, необходимо отправить email менеджеру при переходе заказа в статус "processing" (обработка). Пример кода:
function send_custom_order_status_notification($order_id, $old_status, $new_status, $order) {
if ($new_status === 'processing') {
$to = 'manager@example.com';
$subject = 'Новый заказ в обработке №' . $order_id;
$message = 'Заказ №' . $order_id . ' изменил статус с "' . $old_status . '" на "' . $new_status . '".';
wp_mail($to, $subject, $message);
}
}Как проверить, что уведомление отправляется
- Включите логирование почты (например, с помощью плагина WP Mail Logging).
- Сделайте тестовое изменение статуса заказа в админке WooCommerce.
- Проверьте логи и почтовый ящик менеджера.
- Для отладки можно добавить
error_log()в функцию, чтобы убедиться, что она вызывается.
Частые ошибки и как их исправить
- Функция не вызывается: проверьте, что хук подключён с правильным количеством аргументов (4).
- Письма не отправляются: убедитесь, что
wp_mail()работает на вашем сервере. Для локальной разработки используйте SMTP-плагин. - Неправильный статус: статусы WooCommerce — это короткие строки (например,
processing,completed). Проверьте правильность сравнения. - Ошибка синтаксиса: используйте IDE или проверяйте код перед загрузкой.
Практические советы по безопасности и производительности
- Не отправляйте чувствительные данные в письмах без шифрования.
- Избегайте выполнения тяжёлых операций в функции обработки хука — перенесите их в асинхронные задачи при необходимости.
- Проверяйте наличие объекта
$orderи корректность ID, чтобы избежать ошибок. - Для массовых уведомлений лучше использовать очередь, чтобы не замедлять работу сайта.
Сравнение способов отправки уведомлений на изменение статуса заказа
| Метод | Плюсы | Минусы | Пример |
|---|---|---|---|
Хук woocommerce_order_status_changed | Гибкость, полный контроль, интеграция с кодом | Требует программирования | Пример кода выше |
| Плагины для уведомлений | Удобство настройки, готовый интерфейс | Меньше гибкости, возможны конфликты | Clearfy Pro |
| Вебхуки WooCommerce | Интеграция с внешними сервисами | Настройка требует знаний API | Настройка в WooCommerce > Настройки > Вебхуки |
Итоговый чек-лист для внедрения дополнительного уведомления
- Подключить хук с 4 аргументами.
- Реализовать проверку нужного статуса.
- Использовать
wp_mail()для отправки письма. - Добавить логирование для отладки.
- Провести тестовое изменение заказа и проверить почту.
- Обработать возможные ошибки и исключения.