Письма магазина
WooCommerce сам отправляет письма при событиях заказа: покупателю — «заказ принят» и «заказ выполнен», администратору — «новый заказ». Каждое письмо — отдельный класс со своим идентификатором, настройками и шаблоном. Тексты меняют в панели, а содержимое дополняют хуками.
Письма в панели
Список писем находится в «WooCommerce → Настройки → Email». У каждого есть кнопка «Управление»: там включают письмо, меняют тему, заголовок и дополнительный текст. Внизу страницы — общий вид: логотип, цвета, текст подвала.
| Идентификатор | Кому | Когда |
|---|---|---|
new_order | Администратору | Создан новый заказ |
customer_on_hold_order | Покупателю | Заказ на удержании |
customer_processing_order | Покупателю | Заказ оплачен |
customer_completed_order | Покупателю | Заказ выполнен |
customer_refunded_order | Покупателю | Возврат |
customer_note | Покупателю | Добавлена заметка для покупателя |
customer_new_account | Покупателю | Создана учётная запись |
Где писать код
Создайте файл includes/emails.php и подключите его в acme-shop.php.
Тема письма
// wp-content/plugins/acme-shop/includes/emails.php
add_filter('woocommerce_email_subject_customer_processing_order', function (string $subject, $order): string {
if (!$order instanceof WC_Order) {
return $subject;
}
return sprintf('Заказ №%s принят в работу', $order->get_order_number());
}, 10, 2);Имя фильтра — woocommerce_email_subject_ плюс идентификатор письма. Оформите заказ: письмо покупателю придёт с темой «Заказ №1024 принят в работу». Заголовок внутри письма меняют так же, фильтром woocommerce_email_heading_ с тем же идентификатором.
Добавить содержимое
// wp-content/plugins/acme-shop/includes/emails.php
add_action('woocommerce_email_before_order_table', function (WC_Order $order, bool $sentToAdmin, bool $plainText, $email) {
if ($email->id !== 'customer_completed_order') {
return;
}
$tracking = $order->get_meta('_acme_tracking');
if ($tracking !== '') {
echo '<p>Трек-номер посылки: <strong>' . esc_html($tracking) . '</strong></p>';
}
}, 10, 4);Хук срабатывает во всех письмах с таблицей заказа, поэтому функция проверяет идентификатор письма. В письме «Заказ выполнен» над таблицей товаров появится трек-номер из прошлого урока.
Хуки письма
| Хук | Где в письме |
|---|---|
woocommerce_email_header | Шапка |
woocommerce_email_before_order_table | Перед таблицей заказа |
woocommerce_email_after_order_table | После таблицы заказа |
woocommerce_email_order_meta | Дополнительные сведения о заказе |
woocommerce_email_customer_details | Блок с адресами |
woocommerce_email_footer | Подвал |
Четыре хука вокруг заказа получают одинаковые аргументы: заказ, признак письма администратору, признак текстового формата и объект письма.
Проверка без заказа
Чтобы не оформлять заказ ради каждого письма, откройте заказ в панели, в блоке «Действия по заказу» выберите «Отправить сведения о заказе клиенту» или повторную отправку нужного уведомления и нажмите кнопку со стрелкой. На локальном сервере письма удобно ловить программой Mailpit.
Подмена шаблона
Разметку письма меняют копией шаблона, как в уроке о шаблонах:
Исходный файл в woocommerce/templates/ | Копия в теме |
|---|---|
emails/customer-completed-order.php | acme-child/woocommerce/emails/customer-completed-order.php |
emails/email-header.php | acme-child/woocommerce/emails/email-header.php |
emails/email-styles.php | acme-child/woocommerce/emails/email-styles.php |
Файл email-styles.php содержит CSS всех писем. Копии писем устаревают так же, как остальные шаблоны, — следите за разделом «Шаблоны» на странице «WooCommerce → Статус».
Отключить письмо в коде
// wp-content/plugins/acme-shop/includes/emails.php
add_filter('woocommerce_email_enabled_customer_completed_order', function (bool $enabled, $order): bool {
return $order instanceof WC_Order && $order->get_shipping_method() === '' ? false : $enabled;
}, 10, 2);Письмо «Заказ выполнен» не уйдёт для заказов без доставки — например, с самовывозом, оформленным без способа доставки.
Частая ошибка
Письма «не приходят», и причину ищут в коде. WooCommerce передаёт письмо функции wp_mail(), а та — почтовой службе сервера, которой на хостинге часто нет или её письма попадают в спам. Настройте отправку через SMTP отдельным плагином и проверьте доставку до того, как менять шаблоны.