WooCommerce: автоматическое отправление подтверждения заказа по email через код

Почему стандартное подтверждение заказа в WooCommerce не всегда подходит

WooCommerce по умолчанию отправляет несколько типов email уведомлений, включая подтверждение заказа покупателю. Однако в некоторых случаях требуется настроить автоматическую отправку кастомных писем с дополнительной информацией, изменить формат или задержку отправки. Например, отправить письмо только после полной оплаты или добавить уникальные данные из метаполей.

Диагностика: как понять, что письмо о подтверждении заказа не отправляется или отправляется некорректно

  • Проверьте настройки WooCommerce > Настройки > Email: активна ли рассылка 'Новый заказ' и 'Подтверждение заказа'?
  • Проверьте папку «Спам» у получателя.
  • Просмотрите логи почтового сервера или используйте плагин WP Mail Logging для записи отправленных писем.
  • Проверьте, нет ли конфликтов с другими плагинами, отключив их временно.
  • Проверьте, не отключена ли отправка email через фильтры или кастомный код (например, remove_action на хуках WooCommerce).

Пошаговое решение: как программно отправить письмо с подтверждением заказа по email

В этом примере мы добавим отправку кастомного письма после смены статуса заказа на «завершён» (completed). Это часто требуется, если стандартное письмо не подходит или нужно добавить данные из пользовательских полей.

add_action('woocommerce_order_status_completed', 'send_custom_order_confirmation_email', 10, 1);
function send_custom_order_confirmation_email($order_id) {
    if (!$order_id) return;
    $order = wc_get_order($order_id);

    // Подготовка письма
    $to = $order->get_billing_email();
    $subject = 'Подтверждение вашего заказа №' . $order->get_order_number();
    $headers = array('Content-Type: text/html; charset=UTF-8');

    // Собираем тело письма
    $message = '<h2>Спасибо за ваш заказ!</h2>';
    $message .= '<p>Ваш заказ №' . $order->get_order_number() . ' был успешно завершён.</p>';
    $message .= '<p>Детали заказа:</p><ul>';
    foreach ($order->get_items() as $item) {
        $message .= '<li>' . $item->get_name() . ' x ' . $item->get_quantity() . '</li>';
    }
    $message .= '</ul>';
    $message .= '<p>Общая сумма: ' . wc_price($order->get_total()) . '</p>';

    // Отправка письма
    wp_mail($to, $subject, $message, $headers);
}

Объяснение кода

  • Хук woocommerce_order_status_completed срабатывает при смене статуса на «завершён».
  • Функция получает ID заказа, затем объект заказа для доступа к данным.
  • Подготавливается письмо с HTML форматированием.
  • Письмо отправляется через стандартную функцию wp_mail.

Проверка результата после внедрения

  • Создайте тестовый заказ и переведите его в статус «завершён» вручную из админки WooCommerce.
  • Проверьте, что письмо приходит на указанный email.
  • Используйте WP Mail Logging для мониторинга отправленных писем.

Частые ошибки и их исправление

  • Письмо не отправляется: Проверьте, не отключена ли функция wp_mail плагинами безопасности или сервером. Попробуйте установить SMTP-плагин (например, WP Mail SMTP) для надежной отправки.
  • Письмо приходит в спам: Настройте DKIM, SPF и DMARC записи домена, используйте авторитетный SMTP-сервер.
  • Письмо приходит без форматирования: Убедитесь, что в заголовках письма указан Content-Type: text/html.
  • Данные заказа не отображаются или пустые: Проверьте, что используется правильный объект $order и методы для получения данных.

Практические советы по безопасности и производительности

  • Не отправляйте письма с тяжелыми вложениями или большим количеством данных напрямую через wp_mail, это может замедлить сайт.
  • Используйте очереди задач (например, плагин WP Cron или внешние очереди) для отправки большого количества писем.
  • Фильтруйте и валидируйте все данные до отправки, чтобы избежать инъекций или ошибок.
  • Ограничьте отправку писем только при необходимых статусах, чтобы не создавать нагрузку.

Сравнение вариантов реализации отправки email в WooCommerce

ВариантОписаниеПлюсыМинусы
Стандартные email WooCommerceИспользование встроенных шаблонов и настроек в админкеПростота, поддержкаОграниченные возможности кастомизации
Кастомный код на хукахДобавление собственного кода для отправкиГибкость, полный контрольТребует навыков программирования, поддержка
Плагины SMTP и кастомизации emailИспользование плагинов для расширения функционалаУдобство, расширенные настройкиДополнительная нагрузка, возможные конфликты
Как создать автоматический анализ и фильтровку спама в комментариях WordPress с помощью AI
11.02.2026
Как создать автоматический перевод постов WordPress с помощью AI
11.03.2026
WooCommerce: как использовать хуки для добавления пользовательных функций
22.04.2026
WooCommerce: автоматическое добавление метаданных к товарам через код
20.06.2026
WooCommerce: автоматическое удаление неактивных корзин по срокам через код
24.06.2026