wpmail.ru wordpress WP Mail

Использование хука WooCommerce Email Attachments для добавления вложений в email WooCommerce

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

WooCommerce по умолчанию не поддерживает добавление вложений к уведомлениям email. Многие разработчики сталкиваются с задачей добавить PDF-счёт, договор или прайс-лист к письмам, но стандартного интерфейса для этого нет. Если вложения не появляются, необходимо проверить, правильно ли реализован код, и корректно ли подхватывается нужный email-уведомление.

Пошаговое решение: добавляем вложения в письма WooCommerce

1. Определяем нужный хук

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

2. Пример базового кода для добавления вложения

add_filter('woocommerce_email_attachments', 'add_attachment_to_woocommerce_email', 10, 3);
function add_attachment_to_woocommerce_email($attachments, $email_id, $order) {
    // Добавляем вложение только к email с ID 'customer_completed_order'
    if ($email_id === 'customer_completed_order' && $order instanceof WC_Order) {
        // Путь к файлу на сервере
        $upload_dir = wp_upload_dir();
        $file_path = $upload_dir['basedir'] . '/invoices/invoice-' . $order->get_order_number() . '.pdf';

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

В этом примере вложение прикрепится только к письму о завершённом заказе, если файл существует в папке /wp-content/uploads/invoices/.

3. Генерация вложения (PDF) динамически

Если необходимо сгенерировать PDF-счёт на лету, для этого можно использовать библиотеки вроде TCPDF или mPDF. Пример упрощённой генерации и сохранения файла:

function generate_invoice_pdf($order) {
    $upload_dir = wp_upload_dir();
    $file_path = $upload_dir['basedir'] . '/invoices/invoice-' . $order->get_order_number() . '.pdf';

    if (!file_exists($file_path)) {
        // Подключаем TCPDF (пример)
        require_once 'tcpdf_include.php';
        $pdf = new TCPDF();
        $pdf->AddPage();
        $pdf->SetFont('helvetica', '', 12);
        $pdf->Write(0, 'Invoice for order #' . $order->get_order_number());
        // Можно добавить больше данных заказа
        $pdf->Output($file_path, 'F');
    }
    return $file_path;
}

И использовать в фильтре:

add_filter('woocommerce_email_attachments', 'add_dynamic_invoice_attachment', 10, 3);
function add_dynamic_invoice_attachment($attachments, $email_id, $order) {
    if ($email_id === 'customer_completed_order' && $order instanceof WC_Order) {
        $file_path = generate_invoice_pdf($order);
        if ($file_path && file_exists($file_path)) {
            $attachments[] = $file_path;
        }
    }
    return $attachments;
}

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

  • Оформите тестовый заказ и переведите его в статус «Завершён».
  • Проверьте, что в письме с уведомлением есть вложение PDF-файла.
  • Если письма не приходят, временно включите логирование email через плагин WP Mail Logging или аналогичный.
  • Убедитесь, что файл существует и доступен серверу по указанному пути.

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

  • Вложение не появляется: проверьте правильность ID email ($email_id) — для разных писем он разный (например, customer_processing_order, customer_completed_order).
  • Файл не найден: убедитесь, что путь к файлу абсолютный и файл реально существует. Используйте file_exists().
  • Письма не отправляются после добавления кода: возможен синтаксический сбой или конфликт с другим плагином. Включите WP_DEBUG и просмотрите ошибки.
  • Большой размер вложений замедляет отправку: оптимизируйте PDF или используйте ссылки вместо вложений.

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

  • Не храните генерируемые PDF в публичных папках без ограничений доступа — можно настроить .htaccess или использовать приватные папки.
  • Добавляйте вложения только к нужным типам писем, чтобы не создавать лишнюю нагрузку и не увеличивать трафик.
  • Очистка старых PDF-файлов: настройте CRON-задачу для удаления файлов старше, например, 30 дней.
  • Используйте кеширование генерации PDF, чтобы не создавать файл при каждом письме.

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

МетодПлюсыМинусыКогда использовать
Добавление статического файла Просто реализовать, не требует дополнительных библиотек Файл всегда один и тот же, не персонализирован Прикрепить прайс-лист, инструкцию
Генерация PDF динамически Персонализация, актуальность данных Требует ресурсов, библиотек, кэширования Счета, договоры, индивидуальные предложения
Добавление ссылки вместо вложения Меньше нагрузки, проще масштабировать Зависимость от доступности сайта, не всегда удобно Большие файлы, часто обновляемые материалы
×
WPRemark
Внимание Внимание Внимание Внимание
-15%

на WPRemark плагин WordPress

Прокачай свой сайт! ⋙