wpmail.ru wordpress WP Mail

Как использовать хук WooCommerce Email To для добавления дополнительных данных в письмо

В чем суть задачи: добавление пользовательских данных в email WooCommerce

Во многих проектах на WooCommerce требуется расширить стандартные email-уведомления дополнительной информацией, например, добавить кастомные поля заказа, примечания или ссылки. Для этого можно использовать хук woocommerce_email, но правильнее и удобнее — хук woocommerce_email_recipient_{$email_id} или фильтры для изменения содержимого писем. В статье подробно разберем, как через хук woocommerce_email_to добавить дополнительные данные непосредственно в тело письма, не меняя шаблоны.

Диагностика: почему стандартные методы не всегда подходят

Стандартные шаблоны WooCommerce email расположены в woocommerce/templates/emails/. При переопределении через тему вы можете добавить данные, но это требует работы с PHP и HTML шаблонами. Не всегда удобно и безопасно. Также, некоторые плагины могут конфликтовать с переопределениями.

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

Пошаговое решение: добавляем кастомные данные в email через хук woocommerce_email_to

1. Определяем нужный email ID

WooCommerce использует идентификаторы email уведомлений, например, new_order, customer_processing_order, customer_completed_order. Нужно выбрать, в какое письмо добавить данные. Пример ниже добавляет информацию в письмо о новом заказе.

2. Добавляем фильтр в functions.php или в плагин

add_filter('woocommerce_email_to_new_order', 'add_custom_data_to_new_order_email', 10, 2);
function add_custom_data_to_new_order_email($email_content, $order) {
    if (!is_a($order, 'WC_Order')) {
        return $email_content;
    }

    // Получаем значение кастомного поля из мета заказа
    $custom_value = $order->get_meta('_custom_order_field');

    if ($custom_value) {
        // Формируем HTML для вставки
        $custom_html = '<p><strong>Дополнительная информация:</strong> ' . esc_html($custom_value) . '</p>';

        // Вставляем перед закрывающим тегом </body> или просто в конец
        $email_content .= $custom_html;
    }

    return $email_content;
}

3. Проверяем наличие кастомного поля в заказе

Кастомное поле _custom_order_field можно заполнить, например, при оформлении заказа через woocommerce_checkout_update_order_meta:

add_action('woocommerce_checkout_update_order_meta', 'save_custom_checkout_field');
function save_custom_checkout_field($order_id) {
    if (!empty($_POST['custom_field'])) {
        update_post_meta($order_id, '_custom_order_field', sanitize_text_field($_POST['custom_field']));
    }
}

4. Добавляем поле на страницу оформления заказа

Чтобы пользователь вводил данные, добавьте поле в форму:

add_action('woocommerce_after_order_notes', 'add_custom_checkout_field');
function add_custom_checkout_field($checkout) {
    echo '<div id="custom_checkout_field">';
    woocommerce_form_field('custom_field', array(
        'type' => 'text',
        'class' => array('custom-field-class form-row-wide'),
        'label' => __('Дополнительная информация'),
        'placeholder' => __('Введите данные для заказа'),
        'required' => false,
    ), $checkout->get_value('custom_field'));
    echo '</div>';
}

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

1. Создайте тестовый заказ, заполнив дополнительное поле на оформлении.

2. Проверьте письмо «Новый заказ» (new_order) — в теле письма должна появиться ваша дополнительная информация.

3. Для локальной проверки можно использовать плагин WP Mail Logging или аналогичный, чтобы увидеть сформированный email.

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

  • Пустое значение кастомного поля: Проверьте, что поле действительно сохраняется в мета заказа. Используйте var_dump или error_log для отладки.
  • Письмо не содержит изменений: Проверьте, что используете правильный идентификатор email в фильтре. Для других писем нужно менять woocommerce_email_to_{$email_id}.
  • HTML в письме ломается: Соблюдайте корректный HTML. Не вставляйте неэкранированный пользовательский ввод без esc_html.
  • Конфликт с другими плагинами email: Временно отключите плагины, влияющие на email, чтобы проверить совместимость.

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

  • Всегда очищайте пользовательские данные через sanitize_text_field или аналогичные функции перед сохранением и выводом.
  • Не вставляйте в письмо слишком большой объем данных — это может привести к блокировкам у почтовых провайдеров.
  • Если требуется массовая рассылка, используйте отложенную отправку или сторонние сервисы SMTP/API.
  • Для быстрой отладки email включайте WP_DEBUG_LOG и используйте логгеры почты.

Сравнение способов добавления данных в email WooCommerce

МетодГде менятьПлюсыМинусы
Переопределение шаблоновТемаВысокий контроль над разметкойСложно поддерживать, конфликт с обновлениями
Хук woocommerce_email_to_{$email_id}functions.php или плагинЛегко внедрять, не требует редактирования шаблоновОграничен возможностями форматирования
Плагины для email кастомизацииАдминкаУдобно, без кодаМогут быть тяжелыми и конфликтовать
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее