Письма WooCommerce: как настроить и изменить шаблоны email

Письма WooCommerce: как настроить и изменить шаблоны email

Кратко: письма в 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.

TimeWeb

Частые вопросы про письма 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 и продвижении. Опишите задачу через форму контактов — предложим решение и рассчитаем стоимость.

Clearfy

Поделиться:
Telegram ВКонтакте