Кратко: письма в WooCommerce — это набор PHP-шаблонов в woocommerce/templates/emails/, каждый из которых отвечает за свой тип уведомления: новый заказ, обработка, завершение, сброс пароля, отмена. Менять их правильно двумя способами: скопировать нужный шаблон в дочернюю тему по пути yourtheme/woocommerce/emails/ (тогда обновление плагина его не затрёт) или подцепиться к фильтрам woocommerce_email_heading_*, woocommerce_email_subject_*, woocommerce_email_styles и хукам вроде woocommerce_email_order_meta. Отдельная задача — доставка: без SMTP письма уходят в спам или не доходят вовсе. Ниже — структура шаблонов, готовые сниппеты для темы, свои данные в письмах и чек-лист проверки.
Как устроены письма в WooCommerce
Все уведомления WooCommerce строятся на классах, наследующих WC_Email. Класс отвечает за три вещи: когда отправлять письмо, какой шаблон использовать и какие данные подставить. Шаблоны лежат в папке плагина templates/emails/ и представляют собой смесь HTML и PHP: в них доступны переменные вроде $order, $email_heading, $additional_content.
Уведомлений несколько, и у каждого свой шаблон и свои настройки в разделе WooCommerce → Настройки → Почта. Понимать, за какое письмо какой файл отвечает, — половина успеха: править «не тот» файл и не видеть результата очень легко.
| Письмо | Файл шаблона | Когда отправляется |
|---|---|---|
| Новый заказ | admin-new-order.php | После оформления заказа — администратору |
| Заказ в обработке | customer-processing-order.php | При смене статуса на «Обработка» |
| Заказ выполнен | customer-completed-order.php | При смене статуса на «Выполнен» |
| Сброс пароля и новый аккаунт | customer-reset-password.php, customer-new-account.php | При регистрации и восстановлении доступа |
| Возврат средств | customer-refunded-order.php | При возврате по заказу |
Отдельно идёт «подвал» и «шапка» всех писем: email-header.php и email-footer.php. Если нужно поменять логотип, подпись или добавить блок с контактами в каждое письмо — править надо именно их, а не каждый шаблон по отдельности.
Правильное переопределение шаблона: только через дочернюю тему
Главное правило: не редактируйте файлы в папке плагина. При первом же обновлении WooCommerce ваши правки исчезнут. WordPress и WooCommerce ищут шаблон сначала в теме, и только потом в плагине — этим и нужно пользоваться.
Порядок действий: создайте в дочерней теме папку woocommerce/emails/ и скопируйте туда нужный файл из плагина, сохранив структуру. Например, чтобы изменить письмо «Заказ выполнен», скопируйте templates/emails/customer-completed-order.php в yourtheme/woocommerce/emails/customer-completed-order.php.
<?php
// wp-content/themes/mytheme-child/woocommerce/emails/customer-completed-order.php
// Файл — копия шаблона WooCommerce. Правим только то, что нужно.
if ( ! defined( 'ABSPATH' ) ) {
exit; // Прямой доступ к файлу запрещён
}
do_action( 'woocommerce_email_header', $email_heading, $email );
echo '<p>Спасибо за заказ! Мы уже передали его в доставку.</p>';
do_action( 'woocommerce_email_order_details', $order, $sent_to_admin, $plain_text, $email );
do_action( 'woocommerce_email_customer_details', $order, $sent_to_admin, $plain_text, $email );
if ( $additional_content ) {
echo wp_kses_post( wpautop( wptexturize( $additional_content ) ) );
}
do_action( 'woocommerce_email_footer', $email ); Если дочерней темы ещё нет, начните с материала дочерняя тема WordPress: как создать и зачем нужна: без неё правки шаблонов бессмысленны — их затрёт обновление темы.
Что менять шаблоном, а что фильтром
Не всё нужно править в файлах: заголовки, тему письма и стили удобнее менять фильтрами — это меньше кода и меньше риска сломать вёрстку при обновлении. Ориентируйтесь на таблицу.
| Задача | Инструмент | Где делается |
|---|---|---|
| Текст и структура письма | Копия шаблона в теме | yourtheme/woocommerce/emails/ |
| Заголовок и тема письма | Фильтры woocommerce_email_heading_*, woocommerce_email_subject_* | functions.php |
| Отправитель и адрес ответа | Фильтры woocommerce_email_from_name, woocommerce_email_from_address | functions.php |
| Стили письма | Фильтр woocommerce_email_styles | functions.php |
| Дополнительные данные о заказе | Хук woocommerce_email_order_meta | functions.php |
Фильтры и хуки — это точки, которые сам WooCommerce вызывает в нужный момент. Как они устроены и чем отличаются action от filter, подробно разобрано в гайде хуки WordPress: actions и filters.
Заголовок, тема письма и отправитель
Самое частое, что просят поменять: заголовок внутри письма, тему в почтовом клиенте и имя отправителя. Всё это — несколько фильтров. Обратите внимание: у заголовка и темы фильтр содержит тип письма, поэтому менять их можно точечно, не задевая остальные уведомления.
<?php
// Заголовок внутри письма «Заказ выполнен»
add_filter( 'woocommerce_email_heading_customer_completed_order', function ( $heading, $email ) {
return 'Ваш заказ отправлен';
}, 10, 2 );
// Тема письма (то, что видно в списке писем)
add_filter( 'woocommerce_email_subject_customer_completed_order', function ( $subject, $email ) {
return 'Заказ №' . $email->object->get_order_number() . ' отправлен';
}, 10, 2 );
// Имя и адрес отправителя
add_filter( 'woocommerce_email_from_name', function ( $name ) {
return 'Магазин «Пример»';
} );
add_filter( 'woocommerce_email_from_address', function ( $address ) {
return 'shop@example.ru';
} ); Важно, чтобы адрес отправителя был на вашем домене и совпадал с тем, который настроен в почтовом сервисе: иначе письма начнут попадать в спам или вовсе отклоняться получателем.
Свои данные в письме: трек-номер, комментарий, поле заказа
Классическая задача: после отправки заказа нужно показать клиенту трек-номер службы доставки. Правильное место — хук woocommerce_email_order_meta: он выводит дополнительный блок в письме и не требует правки самого шаблона.
<?php
add_action( 'woocommerce_email_order_meta', function ( $order, $sent_to_admin, $plain_text, $email ) {
$tracking = $order->get_meta( '_tracking_number' );
if ( ! $tracking ) {
return;
}
if ( $plain_text ) {
echo "\nТрек-номер: " . $tracking . "\n";
return;
}
echo '<p style="margin:0 0 16px"><strong>Трек-номер для отслеживания:</strong> ' . esc_html( $tracking ) . '</p>';
}, 10, 4 ); Точно так же можно вывести произвольные поля, которые вы добавили в оформление заказа: комментарий, желаемую дату доставки, подарочную упаковку. Как такие поля вообще создаются, пошагово описано в гайде как добавить свои поля оформления заказа в WooCommerce.
Если нужно изменить не только письмо, но и саму страницу «Спасибо», пригодятся полезные сниппеты для functions.php — там собраны типовые приёмы работы с хуками и метаданными.
Стили и вёрстка писем
Почтовые клиенты — консервативная среда: Gmail, Outlook и мобильные приложения поддерживают разные наборы CSS. Поэтому в письмах WooCommerce стили инлайновые, а внешний вид задаётся фильтром woocommerce_email_styles. Через него можно поменять фон, шрифты, цвет кнопок и заголовков — не трогая шаблоны.
<?php
add_filter( 'woocommerce_email_styles', function ( $css ) {
return $css . '
#body_content {
background-color: #ffffff;
font-family: Arial, Helvetica, sans-serif;
}
h1 {
color: #1f2937;
font-size: 24px;
}
a {
color: #2563eb;
}
';
} ); Практическое правило: не пытайтесь перенести в письмо сложный дизайн с сайта. Чем проще вёрстка — таблицы, инлайн-стили, минимум вложенности — тем стабильнее письмо отображается везде. Проверяйте результат в Gmail, Яндекс Почте и Mail.ru хотя бы вручную: это три самые частые точки просмотра у ваших клиентов.
Доставка: почему письма не доходят
Если письмо сформировано правильно, но не приходит, дело чаще всего не в шаблоне, а в доставке. WordPress по умолчанию отправляет письма через функцию mail() и сервер, который часто не авторизован у получателя: Gmail и Яндекс помечают такие письма как спам или отклоняют.
Решение — отправка через SMTP-сервис с авторизацией, привязанный к вашему домену. Настройка описана в статье почта WordPress не уходит: настройка SMTP и wp_mail. Дополнительно настройте записи SPF и DKIM: без них даже SMTP-письма попадают в спам.
Для проверки доставки удобно отправить тестовое письмо и посмотреть, дошло ли оно и как выглядит:
<?php
// Разовая проверка: отправка письма себе через wp_mail
add_action( 'admin_init', function () {
if ( ! isset( $_GET['email_test'] ) || ! current_user_can( 'manage_options' ) ) {
return;
}
$sent = wp_mail(
get_option( 'admin_email' ),
'Тест писем WooCommerce',
'Комуникация писем проверена: письмо доставлено.',
array( 'Content-Type: text/html; charset=UTF-8' )
);
error_log( 'wp_mail result: ' . ( $sent ? 'sent' : 'failed' ) );
wp_die( $sent ? 'OK: письмо отправлено' : 'Ошибка: письмо не ушло' );
} ); Код проверки удалите сразу после теста: его не место на боевом сайте. Как искать причины ошибок через лог, описано в материале WP_DEBUG и отладка WordPress.
Типичные ошибки
Соберём то, что встречается чаще всего, в короткую шпаргалку.
| Ошибка | Причина | Решение |
|---|---|---|
| Правки шаблона не видны | Файл изменён в плагине или путь в теме неверный | Скопировать шаблон в yourtheme/woocommerce/emails/ |
| После обновления всё пропало | Правки были в папке плагина | Работать только в дочерней теме |
| Письма уходят в спам | Отправка через mail() и сервер без SPF/DKIM | Настроить SMTP и записи домена |
| В письме нет трек-номера | Данные не переданы в шаблон | Хук woocommerce_email_order_meta |
| Стили не применяются | Почтовый клиент вырезает часть CSS | Минимум стилей и инлайн-подход |
Ещё одна распространённая ситуация — письма «зависли»: они уходят не сразу, а по крону. Если нужно понять, почему уведомление пришло с задержкой, посмотрите материал планировщик wp-cron в WordPress: на малопосещаемых сайтах задачи могут откладываться.
Чек-лист настройки писем
Порядок, который стоит пройти один раз и потом поддерживать. Во-первых, заведите дочернюю тему и переопределите в ней только нужные шаблоны, а не все подряд: каждая копия — это ответственность при обновлении WooCommerce. Во-вторых, настройте отправителя на своём домене и SMTP — без этого остальные правки почти бессмысленны.
В-третьих, добавьте нужные данные о заказе хуком, а не правкой шаблона: так они появятся во всех письмах сразу. В-четвёртых, прогоните полный цикл тестом: зарегистрируйте тестового пользователя, оформите заказ, смените статусы и посмотрите каждое письмо на телефоне и в десктопном клиенте. В-пятых, проверьте тексты: опечатки в письмах магазина подрывают доверие не меньше, чем в описании товара.
И последнее: не забывайте про юридическую часть — ссылка на политику конфиденциальности и реквизиты магазина в подвале письма обязательны. Как устроен магазин на WooCommerce в целом, разобрано в статье заказать интернет-магазин на WordPress: WooCommerce, цена и сроки, а вопросы каталога и оформления — в материале каталог товаров WooCommerce.

Частые вопросы про письма WooCommerce
Где в WooCommerce лежат шаблоны писем?
В папке плагина: woocommerce/templates/emails/. Но править файлы там нельзя — обновление плагина их затрёт. Правильный способ: скопировать нужный шаблон в дочернюю тему по пути yourtheme/woocommerce/emails/, сохранив имя файла, и редактировать копию. WooCommerce сначала ищет шаблон в теме, потом в плагине.
Как изменить заголовок или тему письма WooCommerce?
Фильтрами в functions.php: woocommerce_email_heading_customer_completed_order меняет заголовок внутри письма, woocommerce_email_subject_customer_completed_order — тему в почтовом клиенте. В названии фильтра указывается тип письма, поэтому менять их можно точечно, не затрагивая остальные уведомления.
Почему письма WooCommerce уходят в спам?
Чаще всего потому, что WordPress отправляет их через функцию mail() без авторизации на почтовом сервере и без записей SPF/DKIM для домена. Решение: подключить SMTP-сервис, настроить отправителя на своём домене и добавить записи SPF и DKIM в DNS.
Как добавить в письмо свои данные, например трек-номер?
Хуком woocommerce_email_order_meta в functions.php: в нём получаете заказ, читаете нужное метаполе и выводите его в письме с проверкой на plain_text. Так дополнительный блок появится во всех письмах по заказу, и при этом не придётся править ни один шаблон.
Можно ли полностью заменить вёрстку письма своим HTML?
Да, но лучше делать это на уровне шаблона письма в дочерней теме: сначала email-header.php и email-footer.php, затем конкретный шаблон. Учтите, что почтовые клиенты плохо поддерживают современный CSS, поэтому сложный дизайн с сайта в письме развалится — нужна простая табличная вёрстка с инлайн-стилями.
Правки шаблона не отображаются — что проверить?
Три вещи: файл лежит именно в yourtheme/woocommerce/emails/ с правильным именем; тема — дочерняя, а не родительская; и очищен кэш (плагин кэширования, CDN, браузер). Если письма отправляются через очередь, проверьте планировщик wp-cron — задачи могли отложиться.
Вывод
Письма WooCommerce — это шаблоны в дочерней теме плюс небольшой набор фильтров и хуков. Такой подход даёт полный контроль над текстом, дизайном и данными, при этом обновления плагина ничего не ломают: ваши копии лежат в теме, а не в WooCommerce.
Порядок простой: переопределите нужные шаблоны, задайте заголовки и отправителя фильтрами, добавьте свои данные хуком, настройте SMTP с SPF и DKIM, затем проверьте весь цикл тестовым заказом. Так письма магазина начинают работать на продажи, а не только на формальность.
Если нужно доработать магазин на WooCommerce — настроить письма, добавить поля оформления заказа, подключить почту и интеграции — эту задачу можно передать одной команде. Посмотрите услуги разработки и продвижения сайтов, изучите портфолио выполненных проектов и почитайте блог о WordPress и продвижении. Опишите задачу через форму контактов — предложим решение и рассчитаем стоимость.



