Диагностика проблемы с уведомлениями WooCommerce
Иногда стандартная система уведомлений WooCommerce перестаёт отправлять письма или требуется кастомизация отправки без установки дополнительных плагинов. Проблемы могут быть связаны с конфликтами плагинов, неправильными хуками или настройками почтового сервера. Чтобы убедиться, что уведомления действительно не отправляются, проверьте:
- Логи почтового сервера (например, через cPanel или SMTP журнал);
- Стандартный функционал WordPress
wp_mail()с тестовой функцией; - Настройки WooCommerce в разделе Настройки > Email (включены ли нужные уведомления);
- Конфликты с темой или плагинами – временно отключите сторонние плагины и переключитесь на дефолтную тему.
Пошаговое решение отправки email уведомлений без плагинов
1. Проверка базового отправителя почты
Для начала убедитесь, что WordPress может отправлять почту. Добавьте в файл functions.php вашей темы следующий код для теста:
add_action('init', function() {
if (isset($_GET['test_mail'])) {
wp_mail('ваш_email@пример.ком', 'Тест почты', 'Проверка отправки почты WordPress');
exit('Письмо отправлено или попытка отправки выполнена.');
}
});Зайдите в браузере на https://ваш-сайт/?test_mail=1 и проверьте почту.
2. Кастомная отправка уведомлений о заказе
WooCommerce использует класс WC_Emails для отправки писем. Можно написать свой хук на событие создания заказа и отправить кастомное письмо:
add_action('woocommerce_thankyou', 'custom_send_order_email', 10, 1);
function custom_send_order_email($order_id) {
if (!$order_id) return;
$order = wc_get_order($order_id);
$to = $order->get_billing_email();
$subject = 'Ваш заказ #' . $order_id . ' принят';
$headers = array('Content-Type: text/html; charset=UTF-8');
$body = '<h1>Спасибо за заказ!</h1>';
$body .= '<p>Ваш заказ №' . $order_id . ' успешно создан.</p>';
$body .= '<p>Сумма: ' . $order->get_formatted_order_total() . '</p>';
wp_mail($to, $subject, $body, $headers);
}Этот код отправит простое HTML-письмо покупателю после оформления заказа.
3. Отправка уведомления администратору
Чтобы отправить уведомления администратору сайта при новом заказе, добавьте:
add_action('woocommerce_thankyou', 'custom_send_admin_order_notification', 20, 1);
function custom_send_admin_order_notification($order_id) {
if (!$order_id) return;
$order = wc_get_order($order_id);
$to = get_option('admin_email');
$subject = 'Новый заказ #' . $order_id;
$headers = array('Content-Type: text/html; charset=UTF-8');
$body = '<h2>Новый заказ на сайте</h2>';
$body .= '<p>ID заказа: ' . $order_id . '</p>';
$body .= '<p>Клиент: ' . $order->get_billing_first_name() . ' ' . $order->get_billing_last_name() . '</p>';
$body .= '<p>Сумма: ' . $order->get_formatted_order_total() . '</p>';
wp_mail($to, $subject, $body, $headers);
}Проверка результата после внедрения
- Оформите тестовый заказ на сайте;
- Проверьте почту покупателя и администратора;
- Если письма не пришли, проверьте логи сервера, спам-папку, и включены ли email-уведомления в WooCommerce;
- Тестируйте отключая сторонние плагины, чтобы исключить конфликты.
Частые ошибки и как их исправить
- Письма не отправляются – проблема с почтовым сервером, настройками SMTP или блокировкой хостингом. Используйте SMTP через
wp_mail(например, черезphpmailer_init), либо настройте внешний SMTP-сервер. - Письма попадают в спам – проверьте SPF, DKIM, DMARC записи вашего домена, используйте HTML-шаблоны с корректными заголовками.
- Конфликты с другими плагинами – отключайте плагины один за другим, чтобы выявить источник проблемы.
- Неправильные хуки – используйте хуки, рекомендованные в официальной документации WooCommerce (
woocommerce_thankyou,woocommerce_order_status_completedи т.д.).
Практические советы по безопасности и производительности
- Не отправляйте письма с большого объёма данных напрямую, формируйте краткие и информативные письма.
- Используйте транспорт SMTP с аутентификацией для надёжной доставки.
- При необходимости добавляйте задержки или очереди отправки писем, чтобы избежать блокировок хостинга.
- Проверяйте и валидируйте email-адреса перед отправкой, чтобы избежать ошибок.
Сравнение способов отправки уведомлений
| Метод | Преимущества | Недостатки | Компромисс |
|---|---|---|---|
| Стандартные email WooCommerce | Простота использования, встроена в ядро | Мало настроек, возможны конфликты | Использовать при стандартных требованиях |
| Кастомные хук-функции (код) | Гибкость, можно полностью контролировать контент и отправку | Требует навыков разработки и тестирования | Оптимально для уникальных сценариев |
| Плагины SMTP и уведомлений | Упрощают настройку SMTP, расширяют функционал | Дополнительная нагрузка, возможны конфликты | Использовать, если стандартные методы не работают |