Диагностика проблемы: почему письма WooCommerce не отправляются при смене статуса заказа
Частая ситуация — магазин на WooCommerce перестает отправлять письма покупателям при изменении статуса заказа (например, со "в обработке" на "завершен"). Для начала необходимо определить, на каком этапе происходит сбой:
- Проверить, отправляются ли вообще email-сообщения из WordPress (например, при регистрации пользователя или восстановлении пароля).
- Убедиться, что в WooCommerce включена отправка нужных уведомлений (WooCommerce > Настройки > Email).
- Проверить, не конфликтуют ли плагины, связанные с отправкой почты или кастомизацией заказов.
- Проверить логи сервера и WooCommerce (если активен режим отладки в WooCommerce).
Пошаговое решение: как вернуть отправку писем при смене статуса заказа в WooCommerce
1. Проверка включения уведомлений WooCommerce
Перейдите в WooCommerce > Настройки > Email и убедитесь, что нужные уведомления активированы. Например, "Заказ завершен" должен быть включен и иметь корректный email-шаблон.
2. Тест отправки письма вручную
Для проверки отправки email WooCommerce можно использовать следующий код, добавив его временно в functions.php вашей темы или в плагин для сниппетов:
add_action('init', function() {
if (isset($_GET['test_wc_email'])) {
$order = wc_get_order(1); // замените на ID существующего заказа
if ($order) {
WC()->mailer()->emails['WC_Email_Customer_Completed_Order']->trigger($order->get_id());
exit('Test email sent');
} else {
exit('Order not found');
}
}
});После добавления перейдите по URL https://example.com/?test_wc_email=1 и проверьте, приходит ли письмо.
3. Проверка конфликтов и кода, влияющего на смену статуса
Если письма не приходят, вероятно, другие плагины или кастомный код блокируют событие отправки. Попробуйте временно отключить все плагины, кроме WooCommerce, и переключиться на стандартную тему (например, Twenty Twenty-Three). Если после этого письма начнут приходить — ищите конфликт.
4. Принудительная отправка email при смене статуса заказа
Иногда полезно добавить принудительный вызов email при изменении статуса, если стандартные хуки не срабатывают из-за особенностей темы или плагинов:
add_action('woocommerce_order_status_completed', function($order_id) {
$order = wc_get_order($order_id);
if ($order) {
WC()->mailer()->emails['WC_Email_Customer_Completed_Order']->trigger($order_id);
}
});Этот код отправит письмо "Заказ завершен" при смене статуса на "completed" вручную.
Проверка результата после внедрения
- Создайте тестовый заказ и измените его статус в админке WooCommerce на "Завершен".
- Проверьте почтовый ящик покупателя — письмо должно прийти.
- Если письмо не пришло, проверьте логи сервера и WooCommerce (включите отладку через
define('WP_DEBUG', true); define('WP_DEBUG_LOG', true);). - Воспользуйтесь SMTP-плагином (например, WP Mail SMTP) для мониторинга отправленных писем и устранения проблем с сервером.
Частые ошибки и способы их исправления
- Письма не отправляются, но другие email приходят. Проверьте, не отключены ли уведомления WooCommerce или не переопределены ли шаблоны писем в теме.
- Конфликт с плагинами кэширования. Отключите кэширование на страницах, где происходят смены статуса или отправка почты.
- Отправка писем блокируется SMTP-сервером. Настройте SMTP через проверенные сервисы (SendGrid, Mailgun, Postmark) и используйте соответствующие плагины.
- Кастомный код меняет статус без вызова нужных хуков. Используйте стандартные функции WooCommerce для смены статуса:
$order->update_status('completed');, чтобы триггерить email-события.
Практические советы по безопасности и производительности
- Не используйте пользовательский код для отправки почты напрямую через
wp_mailбез необходимости — лучше использовать встроенные классы WooCommerce Email, чтобы сохранить совместимость. - Для масштабных магазинов применяйте отложенную отправку писем через очереди (например, с плагинами WP Offload SES или интеграцией с RabbitMQ) для снижения нагрузки.
- Настраивайте SPF, DKIM и DMARC записи в DNS для повышения надежности доставки почты.
Сравнение методов исправления проблемы с отправкой email в WooCommerce
| Метод | Преимущества | Недостатки |
|---|---|---|
| Проверка и включение email в настройках WooCommerce | Простота, официальная поддержка | Не помогает при конфликтах или сбоях сервера |
| Принудительный вызов триггера email через хук | Гарантированная отправка на нужном событии | Может вызвать дублирование писем при неправильном использовании |
| Использование SMTP-плагина | Повышение надежности и отладка отправки | Дополнительная настройка, возможные сложности с сервисом |
| Деактивация конфликтующих плагинов | Определение источника проблемы | Временное решение, требует тестирования |