wpmail.ru wordpress WP Mail

Как отправлять вложения в email-уведомления WooCommerce

Диагностика проблемы: зачем нужны вложения в email WooCommerce

Стандартные email-уведомления WooCommerce не поддерживают вложения файлов. Это ограничение мешает отправлять покупателям дополнительные документы, например, сертификаты, PDF-счета, инструкции или изображения. Часто возникает необходимость автоматически прикреплять к письмам такие файлы на основе данных заказа.

Пошаговое решение: добавляем вложения в email WooCommerce через хук

Для добавления вложений используется фильтр woocommerce_email_attachments. Он позволяет подключать к исходящему письму массив файлов к вложению.

Пример кода для добавления PDF-файла из папки темы в письмо о новом заказе:

add_filter('woocommerce_email_attachments', 'add_attachment_to_customer_invoice', 10, 3); 
function add_attachment_to_customer_invoice( $attachments, $email_id, $order ) {
    if ( ! is_a( $order, 'WC_Order' ) ) {
        return $attachments;
    }

    // Проверяем тип письма
    if ( $email_id === 'customer_invoice' ) {
        $upload_dir = wp_upload_dir();
        $file_path = $upload_dir['basedir'] . '/invoices/invoice-' . $order->get_id() . '.pdf';

        if ( file_exists( $file_path ) ) {
            $attachments[] = $file_path;
        }
    }

    return $attachments;
}

В этом примере предполагается, что PDF-счета генерируются и сохраняются в wp-content/uploads/invoices/ с именем invoice-{ID_заказа}.pdf. Код добавляет вложение только к письму с ID customer_invoice.

Обработка вложений для других типов писем

Чтобы добавить вложения к иным email, например, к уведомлениям о смене статуса заказа, замените условие $email_id === 'customer_invoice' на нужный идентификатор: new_order, customer_processing_order и т.д.

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

  1. Создайте или найдите файл вложения в нужной директории с корректным именем.
  2. Совершите заказ в магазине, инициируя отправку email с нужным ID.
  3. Получите письмо и проверьте наличие вложения в почтовом клиенте.
  4. Если вложение отсутствует, активируйте логирование email через плагин, например, WP Mail Logging, для проверки отправляемых писем.

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

  • Неверный путь к файлу. Проверьте, что путь формируется корректно и файл существует. Используйте file_exists() перед добавлением.
  • Неподдерживаемый формат вложения. Почтовые серверы могут блокировать некоторые типы файлов. Используйте PDF, JPEG, PNG или ZIP.
  • Ошибка в условии фильтра. Проверьте, что $email_id соответствует нужному типу письма. Для диагностики можно вывести значение через error_log($email_id);.
  • Конфликты с плагинами SMTP. Некоторые SMTP плагины могут игнорировать фильтр вложений. Проверьте совместимость.

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

  • Безопасность файлов. Храните вложения вне папки с публичным доступом или ограничьте доступ через .htaccess.
  • Оптимизация размера вложений. Избегайте больших файлов во вложениях, чтобы не увеличить нагрузку на сервер и время доставки.
  • Кэширование. Если вложения статические, генерируйте их заранее и обновляйте по событию, чтобы не создавать файлы на лету при каждом письме.

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

МетодПлюсыМинусыПример
Фильтр woocommerce_email_attachmentsГибко, полностью контролируемо, нет сторонних плагиновТребует программирования, может конфликтовать с SMTP плагинамиКод из статьи
Плагины для вложений (например, WP Attachments)Простота настройки, GUIМогут быть избыточными, нагрузкаПлагин с настройками
Встраивание ссылок на файлыПростота, меньшая нагрузка на почтовый серверМенее удобный UX для пользователяВставка ссылки в тело письма
×
Обнови свой WordPress!

Держи скидку 15% на премиум тему Reboot

Купить со скидкой ⋙