Диагностика проблемы: зачем нужны вложения в 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 и т.д.
Проверка результата после внедрения
- Создайте или найдите файл вложения в нужной директории с корректным именем.
- Совершите заказ в магазине, инициируя отправку email с нужным ID.
- Получите письмо и проверьте наличие вложения в почтовом клиенте.
- Если вложение отсутствует, активируйте логирование 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 для пользователя | Вставка ссылки в тело письма |