wpmail.ru wordpress WP Mail

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

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

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

  • Вложения отсутствуют в отправленных письмах
  • Проблемы с правильным формированием пути к файлу
  • Ошибки в логах PHP или почтового сервера

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

Пошаговое решение: добавление вложений в email WooCommerce

Шаг 1. Подключаем хук woocommerce_email_attachments

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

add_filter('woocommerce_email_attachments', 'add_attachments_to_woocommerce_emails', 10, 3);
function add_attachments_to_woocommerce_emails($attachments, $email_id, $order) {
    // Проверяем тип email
    if (in_array($email_id, array('customer_completed_order', 'new_order'))) {
        // Путь к файлу, который нужно вложить
        $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;
}

Шаг 2. Формируем и сохраняем PDF-счет заранее

Если вам нужно вложить PDF-счет, его нужно сгенерировать и сохранить на сервере до отправки письма. Обычно это делают при смене статуса заказа:

add_action('woocommerce_order_status_processing', 'generate_pdf_invoice_for_order');
function generate_pdf_invoice_for_order($order_id) {
    $order = wc_get_order($order_id);
    $upload_dir = wp_upload_dir();
    $invoice_dir = $upload_dir['basedir'] . '/invoices/';

    if (!file_exists($invoice_dir)) {
        wp_mkdir_p($invoice_dir);
    }

    $file_path = $invoice_dir . 'invoice-' . $order_id . '.pdf';

    // Реализация генерации PDF здесь (через TCPDF, FPDF или другой PHP-библиотекой)
    // Например, используйте сторонний сервис или плагин
    
    // Для примера создадим пустой файл
    file_put_contents($file_path, 'PDF content for order ' . $order_id);
}

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

  • Создайте тестовый заказ в WooCommerce и переведите его в статус «Обработка» (processing).
  • Проверьте, что в папке wp-content/uploads/invoices/ появился PDF для заказа.
  • Дождитесь отправки письма «Заказ завершён» (customer_completed_order) и проверьте вложение в письме.
  • Если почта не приходит или вложение отсутствует, проверьте логи сервера и отладочную информацию WooCommerce.

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

  • Неправильный путь к файлу: Часто используют URL вместо абсолютного пути. В woocommerce_email_attachments нужны именно полные пути на сервере.
  • Файл не существует: Проверьте, что PDF действительно создан до отправки письма.
  • Права доступа к файлу: Убедитесь, что веб-сервер имеет права читать файл.
  • Добавление вложений ко всем письмам: Используйте проверку $email_id, чтобы не класть вложения в лишние уведомления.
  • Кэширование: Если используете кеш-плагины, временно отключите их при отладке.

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

  • Не генерируйте PDF «на лету» в хуках отправки почты — это увеличит время отправки и нагрузку сервера.
  • Сохраняйте PDF в отдельной защищённой папке с правами доступа только для серверного пользователя.
  • Очистка старых PDF: настройте CRON-задачу для удаления устаревших счетов, чтобы не засорять диск.
  • Используйте проверенные библиотеки генерации PDF (TCPDF, Dompdf) и избегайте вызовов внешних сервисов при массовой отправке.

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

МетодОписаниеПлюсыМинусы
Плагин (например, WooCommerce PDF Invoices)Генерация и вложение PDF автоматическиГотовое решение, простая настройкаМожет быть платным, нагрузка на сайт
Код на хуках (пример выше)Своя генерация и вложение через фильтрПолный контроль, кастомизацияНужно писать и отлаживать самому
Внешние сервисыГенерация PDF вне сайта, вложение ссылокСнижение нагрузки на серверЗависимость от сторонних сервисов
×
WPRemark
Внимание Внимание Внимание Внимание
-15%

на WPRemark плагин WordPress

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