WooCommerce по умолчанию отправляет стандартные email уведомления клиентам при изменении статуса заказа. Однако, часто требуется адаптировать эти письма под стиль магазина, добавить дополнительную информацию или изменить шаблон полностью. В этой статье мы подробно рассмотрим, как кастомизировать email уведомления о статусах заказов в WooCommerce с примерами кода и полезными советами.
Почему стоит кастомизировать email уведомления в WooCommerce
Стандартные письма WooCommerce имеют базовый дизайн и минимальный набор информации. Кастомизация позволяет:
- Улучшить визуальное оформление писем в соответствии с брендом магазина.
- Добавить важные детали о заказе или акции для клиента.
- Изменить тексты уведомлений под специфику бизнеса.
- Добавить дополнительные поля из заказа или пользовательские данные.
Все это повышает доверие клиентов и улучшает взаимодействие с магазином.
Как работает система email уведомлений WooCommerce
WooCommerce использует классы, расположенные в woocommerce/includes/emails/. Каждый тип письма — это отдельный класс-наследник от WC_Email. Чтобы изменить шаблон или поведение письма, можно:
- Переопределить шаблоны в папке темы (
woocommerce/emails/). - Создать свой класс email уведомления.
- Использовать хуки для изменения контента или заголовков.
Переопределение шаблонов email в теме
Самый простой способ изменить внешний вид и содержание — скопировать нужный шаблон из wp-content/plugins/woocommerce/templates/emails/ в wp-content/themes/your-theme/woocommerce/emails/ и отредактировать его.
Например, чтобы изменить письмо "Заказ в обработке", скопируйте customer-processing-order.php и внесите правки в HTML и PHP код.
В шаблонах доступны переменные с информацией о заказе, например, $order. Можно вывести дополнительные поля:
<?php echo $order->get_billing_phone(); ?>
Важно не менять структуру хуков, чтобы WooCommerce корректно обрабатывал письмо.
Добавление собственного поля в email уведомления
Иногда нужно добавить в письмо кастомное поле, например, комментарий клиента или внутреннюю заметку. Сделаем пример с добавлением поля "Номер клиента" из метаданных заказа.
Добавим код в файл functions.php темы или в плагин:
function wporders_add_custom_field_to_email( $order, $sent_to_admin, $plain_text, $email ) {
if ( ! $sent_to_admin && $email->id === 'customer_processing_order' ) {
$custom_field = $order->get_meta( '_customer_number' );
if ( $custom_field ) {
echo '<p><strong>Номер клиента:</strong> ' . esc_html( $custom_field ) . '</p>';
}
}
}
add_action( 'woocommerce_email_after_order_table', 'wporders_add_custom_field_to_email', 10, 4 );
Этот хук добавит поле после таблицы заказа в письме "Заказ в обработке".
Создание собственного типа email уведомлений
Если необходимо полностью контролировать логику и шаблон письма, можно создать собственный класс email. Пример минимального класса:
class WPOrders_Email_Custom_Status extends WC_Email {
public function __construct() {
$this->id = 'wporders_custom_status';
$this->title = 'Пользовательский статус заказа';
$this->description = 'Отправляет уведомление при кастомном статусе заказа';
$this->template_html = 'emails/custom-status.php';
$this->template_plain = 'emails/plain/custom-status.php';
$this->template_base = plugin_dir_path( __FILE__ ) . 'templates/';
add_action( 'wporders_trigger_custom_status_notification', array( $this, 'trigger' ), 10, 1 );
parent::__construct();
}
public function trigger( $order_id ) {
if ( $order_id ) {
$this->object = wc_get_order( $order_id );
$this->recipient = $this->object->get_billing_email();
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() {
ob_start();
wc_get_template( $this->template_html, array( 'order' => $this->object ), '', $this->template_base );
return ob_get_clean();
}
public function get_content_plain() {
ob_start();
wc_get_template( $this->template_plain, array( 'order' => $this->object ), '', $this->template_base );
return ob_get_clean();
}
}
Чтобы этот уведомление сработало, вызывайте в нужном месте код:
do_action( 'wporders_trigger_custom_status_notification', $order_id );
Подробное создание шаблонов и регистрацию класса в WooCommerce выходит за рамки этой статьи, но это основа для расширения.
Использование плагинов для кастомизации email WooCommerce
Если вы не хотите писать код, можно использовать готовые плагины. Например:
- Clearfy Pro — позволяет оптимизировать и кастомизировать WooCommerce, включая email уведомления.
- WPRemark — плагин для расширенного управления уведомлениями клиентов и администраторов.
Эти инструменты помогут гибко настраивать письма без глубоких знаний PHP.
Полезные хуки для работы с email уведомлениями WooCommerce
Для кастомизации писем часто используют следующие хуки:
woocommerce_email_before_order_table— добавить контент перед таблицей заказа.woocommerce_email_after_order_table— добавить контент после таблицы заказа.woocommerce_email_headerиwoocommerce_email_footer— изменить шапку и подвал письма.woocommerce_email_subject_customer_processing_order— изменить тему письма.
Пример изменения темы письма:
function wporders_change_email_subject( $subject, $order ) {
return 'Ваш заказ #' . $order->get_order_number() . ' успешно принят';
}
add_filter( 'woocommerce_email_subject_customer_processing_order', 'wporders_change_email_subject', 10, 2 );
Советы и лучшие практики
При кастомизации email уведомлений важно:
- Тестировать каждое изменение на рабочем сайте с тестовыми заказами.
- Сохранять копии оригинальных шаблонов перед изменениями.
- Использовать дочернюю тему для переопределения шаблонов, чтобы не потерять изменения при обновлении.
- Минимизировать количество сторонних плагинов, чтобы избежать конфликтов.
Также стоит следить за производительностью — тяжелые шаблоны или слишком большое количество запросов к базе могут замедлить отправку писем.