WooCommerce: как автоматически изменять шаблоны писем через код

Проблема: необходимость автоматической кастомизации писем WooCommerce

WooCommerce отправляет стандартные письма клиентам и администраторам, но часто требуется изменить содержимое или стиль писем программно, например, добавить динамические данные, изменить текст в зависимости от заказа или клиента. Использование плагинов не всегда удобно или достаточно гибко, поэтому полезно знать, как сделать это через код.

Диагностика: как понять, что стандартных шаблонов недостаточно

Если вы хотите:

  • Автоматически подставлять дополнительные поля из заказа;
  • Изменять стиль письма в зависимости от суммы заказа или статуса;
  • Добавлять персонализированное приветствие;
  • Изменять текст уведомлений без копирования шаблонов в тему;

— значит, стандартный функционал WooCommerce не подходит, и нужна программная замена шаблонов.

Пошаговое решение: как изменить шаблоны писем программно

1. Использование фильтра woocommerce_email_classes

Этот фильтр позволяет переписать класс письма на свой, где вы можете изменить методы вывода.

add_filter('woocommerce_email_classes', 'custom_override_woocommerce_email_classes');
function custom_override_woocommerce_email_classes( $email_classes ) {
    require_once 'class-custom-email.php'; // загружаем класс
    $email_classes['WC_Email_Customer_Completed_Order'] = new WC_Email_Customer_Completed_Order_Custom();
    return $email_classes;
}

Здесь мы переопределяем класс письма о завершённом заказе.

2. Создаём свой класс письма, наследуя стандартный

if ( ! class_exists( 'WC_Email_Customer_Completed_Order_Custom' ) ) {
    class WC_Email_Customer_Completed_Order_Custom extends WC_Email_Customer_Completed_Order {
        public function __construct() {
            parent::__construct();
            // Можно изменить свойства, например subject
            $this->subject = 'Спасибо за заказ №{order_number} на нашем сайте!';
        }

        public function get_content_html() {
            // Получаем оригинальный HTML и заменяем часть или добавляем свои данные
            $original_content = parent::get_content_html();
            $custom_text = '<p>Ваш заказ будет обработан в течение 24 часов.</p>';
            return $original_content . $custom_text;
        }
    }
}

3. Использование фильтров для изменения контента письма без переопределения класса

Если нужно лишь добавить или изменить текст, можно использовать фильтр woocommerce_email_order_meta или woocommerce_email_heading_{$email_id}.

add_action('woocommerce_email_order_meta', 'add_custom_text_to_email', 10, 3);
function add_custom_text_to_email($order, $sent_to_admin, $plain_text) {
    if ( ! $sent_to_admin ) {
        echo '<p>Спасибо, что выбрали нас!</p>';
    }
}

Проверка результата после внедрения

  • Создайте тестовый заказ в WooCommerce;
  • Измените статус заказа на соответствующий (например, "Завершён");
  • Проверьте письмо на почте — должны появиться ваши изменения;
  • Если изменения не отображаются, очистите кэш сайта и почтового клиента;
  • Для HTML-писем проверьте исходный код письма (через «Показать оригинал» в почте).

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

  • Класс письма не загружен. Убедитесь, что путь к файлу с классом правильный и файл подключается через require_once;
  • Изменения не применяются. Проверьте, что фильтр woocommerce_email_classes добавлен в functions.php или в нужном месте и что приоритет не ниже 10;
  • Конфликты с другими плагинами. Отключите плагины, которые могут переопределять шаблоны писем, чтобы диагностировать;
  • Письма отправляются в текстовом формате, а вы меняете HTML. Убедитесь, что меняете правильный метод (get_content_html).

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

  • Не подключайте дополнительные файлы с классами из внешних источников, чтобы избежать вредоносного кода;
  • Проверяйте, что ваши изменения не влияют на отправку писем — тестируйте на тестовом сайте;
  • Избегайте тяжелых операций внутри методов генерации письма, чтобы не замедлять отправку;
  • Для сложных изменений используйте дочернюю тему или собственный плагин — не редактируйте ядро WooCommerce;
  • Регулярно проверяйте совместимость с обновлениями WooCommerce.

Сравнение способов изменения шаблонов писем WooCommerce

МетодОписаниеПлюсыМинусы
Переопределение шаблонов в темеКопирование файлов шаблонов в папку темы и правкаПростой способ, без кодаМожет конфликтовать при обновлении
Переопределение классов письма через woocommerce_email_classesСоздание своих классов писем с изменениямиГибкость, полная кастомизацияТребует навыков PHP, сложнее в поддержке
Использование фильтров и хуковДобавление или замена частей письма через хукиПростота и безопасностьОграничено в возможностях
WooCommerce: автоматическое изменение стоимости доставки по регионам клиента
03.07.2026
WooCommerce: как установить лимит на количество товаров в корзине
17.04.2026
Как автоматизировать обновление плагинов и тем в WordPress с помощью кода
16.01.2026
Как автоматически создавать заголовки и описания для постов WordPress
05.01.2026
Динамический фильтрованный список записей WordPress с WP_Query и AJAX
11.12.2025