wpmail.ru wordpress WP Mail

Как исправить неработающие email-уведомления WooCommerce при смене статуса заказа

Диагностика проблемы: почему письма 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-плагинаПовышение надежности и отладка отправкиДополнительная настройка, возможные сложности с сервисом
Деактивация конфликтующих плагиновОпределение источника проблемыВременное решение, требует тестирования
×
WPRemark
Внимание Внимание Внимание Внимание
-15%

на WPRemark плагин WordPress

Прокачай свой сайт! ⋙