wpmail.ru wordpress WP Mail

Как использовать хуки WooCommerce Email для отправки собственных писем

Диагностика: когда нужны собственные email WooCommerce

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

Пошаговое решение: как добавить свое письмо в WooCommerce Email

1. Создайте класс письма, наследуемый от WC_Email

В вашем плагине или functions.php добавьте класс, который расширит базовый класс WC_Email. В нем опишите заголовок, тему, содержимое письма и условия отправки.

if ( ! class_exists( 'WC_Custom_Email' ) ) { class WC_Custom_Email extends WC_Email { public function __construct() { $this->id = 'custom_email'; $this->title = 'Custom Email'; $this->description = 'Отправляет письмо при специальном событии'; $this->heading = 'Ваш заказ обработан'; $this->subject = 'Информация о заказе #{order_number}'; $this->template_html = 'emails/custom-email.php'; $this->template_plain = 'emails/plain/custom-email.php'; $this->template_base = plugin_dir_path( __FILE__ ) . 'templates/'; // Подключаемся к событию, например, смена статуса заказа add_action( 'woocommerce_order_status_completed_notification', array( $this, 'trigger' ), 10, 1 ); parent::__construct(); $this->recipient = ''; } public function trigger( $order_id ) { if ( ! $order_id ) { return; } $this->object = wc_get_order( $order_id ); if ( ! $this->is_enabled() || ! $this->get_recipient() ) { return; } $this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() ); } public function get_content_html() { return wc_get_template_html( $this->template_html, array( 'order' => $this->object, 'email_heading' => $this->get_heading(), 'sent_to_admin' => false, 'plain_text' => false, 'email' => $this ) ); } public function get_content_plain() { return wc_get_template_html( $this->template_plain, array( 'order' => $this->object, 'email_heading' => $this->get_heading(), 'sent_to_admin' => false, 'plain_text' => true, 'email' => $this ) ); } }

2. Зарегистрируйте email класс в WooCommerce

Добавьте фильтр, который добавит ваш класс в список доступных email уведомлений WooCommerce.

add_filter( 'woocommerce_email_classes', 'add_custom_woocommerce_email' ); function add_custom_woocommerce_email( $emails ) { $emails['WC_Custom_Email'] = new WC_Custom_Email(); return $emails; }

3. Создайте шаблоны email

Создайте HTML и plain текст шаблоны письма в каталоге templates/emails/custom-email.php и templates/emails/plain/custom-email.php. Можно использовать стандартные шаблоны WooCommerce в качестве примера.

Как проверить, что письмо отправляется

  • Переключите статус заказа на тот, который триггерит отправку (например, completed).
  • Проверьте, что в админке WooCommerce в разделе Email есть новое письмо и оно включено.
  • Логируйте отправку с помощью error_log('Custom email triggered for order '.$order_id); внутри метода trigger.
  • Используйте дебаг SMTP плагина или тестовый почтовый сервис для мониторинга реальной отправки.

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

  • Письмо не отображается в списке email WooCommerce. Проверьте правильность регистрации класса и фильтра woocommerce_email_classes.
  • Письмо не отправляется при смене статуса. Убедитесь, что хук woocommerce_order_status_completed_notification выбран правильно и есть передача параметров.
  • Письмо приходит без стилизации. Проверьте, что шаблоны писем лежат в правильном каталоге и используются функции wc_get_template_html.
  • Письмо отправляется многократно. Проверьте, что метод trigger не вызывается несколько раз и добавьте логи для отладки.

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

  • Избегайте тяжелых операций в методе trigger. В случае необходимости используйте WP-Cron для отложенной отправки.
  • Используйте nonce и проверку прав доступа, если триггерите письма на основе действий пользователей.
  • Логируйте ошибки отправки, чтобы своевременно реагировать на проблемы с SMTP.
  • Не используйте wp_mail напрямую для писем WooCommerce — это нарушит единый стиль и логику уведомлений.

Сравнение способов отправки писем в WooCommerce

МетодПреимуществаНедостатки
Использование WC_EmailИнтеграция с WooCommerce, стили, шаблоны, настройки в админкеСложнее в реализации, требует создания классов и шаблонов
Прямой вызов wp_mailПросто быстро сделатьНет стилизации, нарушается логика WooCommerce, нет управления в админке
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее