Диагностика задачи: зачем нужны кастомные уведомления при изменении статуса заказа
По умолчанию WooCommerce отправляет стандартные письма клиентам при смене статуса заказа (например, "в обработке", "завершён"). Однако часто требуется отправлять дополнительно кастомные сообщения или уведомления на электронную почту менеджера, чтобы информировать о специфических событиях. Например, уведомить склад о срочном заказе или отправить клиенту подробные инструкции по оплате.
Если вы столкнулись с проблемой, что стандартные письма не покрывают все сценарии коммуникации, то автоматизация отправки кастомных email — оптимальное решение.
Пошаговое решение: автоматическая отправка кастомных писем при изменении статуса заказа
1. Используем хук woocommerce_order_status_changed
Этот хук срабатывает при смене статуса заказа. На его основе можно добавлять свою логику отправки писем.
2. Пример кода для отправки кастомного email
add_action('woocommerce_order_status_changed', 'wpfront_custom_status_email', 10, 4);
function wpfront_custom_status_email($order_id, $old_status, $new_status, $order) {
// Отправляем письмо только при смене статуса на "on-hold"
if ($new_status === 'on-hold') {
$to = $order->get_billing_email();
$subject = 'Ваш заказ на ожидании оплаты';
$headers = array('Content-Type: text/html; charset=UTF-8');
$message = '<p>Здравствуйте, ' . esc_html($order->get_billing_first_name()) . '!</p>';
$message .= '<p>Ваш заказ #' . $order_id . ' находится на ожидании оплаты.</p>';
$message .= '<p>Пожалуйста, завершите оплату в ближайшее время.</p>';
wp_mail($to, $subject, $message, $headers);
}
}
3. Отправка уведомлений менеджеру
Для отправки уведомления на email менеджера добавим еще один вызов wp_mail:
add_action('woocommerce_order_status_changed', 'wpfront_notify_manager_on_status', 10, 4);
function wpfront_notify_manager_on_status($order_id, $old_status, $new_status, $order) {
if ($new_status === 'completed') {
$manager_email = 'manager@example.com';
$subject = 'Заказ #' . $order_id . ' завершён';
$message = 'Заказ #' . $order_id . ' был успешно завершён.';
wp_mail($manager_email, $subject, $message);
}
}
Проверка результата после внедрения
- Создайте тестовый заказ в WooCommerce.
- Измените статус заказа на целевой (например, "on-hold" или "completed") вручную в админке.
- Проверьте входящие письма на почте клиента и менеджера.
- Для отладки можно временно добавить
error_logвнутри функции, чтобы убедиться, что хук сработал.
Частые ошибки и как их исправить
- Письмо не отправляется: проверьте настройки почты на сервере, возможно,
wp_mailотключен или требует настройки SMTP. - Письмо приходит в спам: настройте SPF/DKIM записи и используйте SMTP-плагин для отправки писем от авторитетного сервера.
- Хук не срабатывает: убедитесь, что функция подключена в
functions.phpили плагине, и что при смене статуса вызывается именноwoocommerce_order_status_changed. - Переменные заказа не доступны: используйте объект
$orderи методы классаWC_Order, а не глобальные переменные.
Практические советы по безопасности и производительности
- Не отправляйте слишком много писем при массовом обновлении статусов, чтобы избежать блокировок почтового сервера.
- Используйте очередь отправки писем через WP-Cron или внешние сервисы, если ожидается большой поток заказов.
- Для кастомных писем оформляйте HTML-контент корректно и избегайте inline-стилей, чтобы письма корректно отображались у получателей.
- Всегда проверяйте и экранируйте данные, используемые в письмах, чтобы предотвратить XSS и инъекции.
- Для сложных сценариев рассмотрите использование фильтров WooCommerce Email Classes, чтобы расширять стандартные шаблоны писем.
Сравнение способов отправки кастомных уведомлений
| Метод | Плюсы | Минусы | Пример |
|---|---|---|---|
Хук woocommerce_order_status_changed | Полный контроль, простота реализации | Нужно писать код, требует базовых знаний PHP | Пример выше |
| Плагины уведомлений (например, WooCommerce Email Customizer) | Удобный UI, шаблоны писем | Может быть ограничен в логике, нагрузка на сайт | Clearfy Pro - расширение |
| Внешние сервисы (SendGrid, Mailgun) | Надёжная доставка, аналитика | Дополнительная настройка, интеграция | SMTP через плагин WP Mail SMTP |