wpmail.ru wordpress WP Mail

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

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

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

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

Пошаговое решение: как правильно добавить вложения к email WooCommerce

1. Подключение вложений через хук woocommerce_email_attachments

В functions.php вашей темы или в кастомном плагине добавьте следующий код:

add_filter('woocommerce_email_attachments', 'add_attachment_to_woocommerce_emails', 10, 3);
function add_attachment_to_woocommerce_emails($attachments, $email_id, $order) {
    // Список email, к которым нужно добавить вложение
    $target_emails = array(
        'customer_completed_order',
        'new_order'
    );
    if (in_array($email_id, $target_emails)) {
        $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;
}

Объяснение:

  • $email_id — идентификатор email-уведомления (например, customer_completed_order — заказ завершен, new_order — новый заказ).
  • Формируем путь к PDF-файлу в папке загрузок WordPress.
  • Проверяем, что файл существует, прежде чем добавить его в массив вложений.

2. Автоматическая генерация PDF-счета (пример с использованием TCPDF)

Если у вас еще нет PDF, можно сгенерировать его программно при смене статуса заказа:

add_action('woocommerce_order_status_completed', 'generate_invoice_pdf_on_order_completed');
function generate_invoice_pdf_on_order_completed($order_id) {
    if (!$order_id) return;
    $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->get_order_number() . '.pdf';

    if (file_exists($file_path)) {
        return; // Уже сгенерирован
    }

    // Подключаем TCPDF (установите библиотеку через composer или вручную)
    if (!class_exists('TCPDF')) {
        require_once WP_CONTENT_DIR . '/libs/tcpdf/tcpdf.php';
    }

    $pdf = new TCPDF();
    $pdf->AddPage();
    $pdf->SetFont('helvetica', '', 12);
    $content = 'Invoice for order #' . $order->get_order_number() . "\n";
    $content .= 'Customer: ' . $order->get_billing_first_name() . ' ' . $order->get_billing_last_name() . "\n";
    $content .= 'Total: ' . $order->get_formatted_order_total() . "\n";
    $pdf->Write(0, $content);
    $pdf->Output($file_path, 'F');
}

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

1. Сделайте тестовый заказ в WooCommerce и переведите его в статус «Завершен» (если добавляете вложение к этому уведомлению).

2. Проверьте, что в папке wp-content/uploads/invoices/ появился PDF-файл с номером заказа.

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

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

  • Файл не прикрепляется к письму: проверьте, что путь к файлу правильный и файл существует на сервере.
  • Ошибка прав доступа: убедитесь, что веб-сервер имеет права на чтение папки и файла вложения.
  • Письмо отправляется без вложения: возможно, неверно указан $email_id в условии. Используйте отладку, например, добавьте error_log($email_id); внутри фильтра, чтобы узнать точный ID.
  • PDF не генерируется: проверьте, что библиотека TCPDF подключена корректно, и что папка для сохранения существует и доступна для записи.

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

  • Не храните PDF-файлы в общедоступных папках без защиты: если документы конфиденциальные, настройте доступ через .htaccess или используйте приватные хранилища.
  • Генерируйте PDF один раз: избегайте генерации PDF при каждом отправлении письма — это нагрузит сервер. Лучше создавать файл при смене статуса заказа.
  • Кэширование: если в письмах часто используются одни и те же вложения, рассмотрите использование кэширования с условием обновления при изменении заказа.
  • Логи для отладки: используйте плагин WP Mail Logging https://wpshop.ru/plugins/clearfy?utm_source=wpmail.ru&utm_medium=article&utm_campaign=kak-dobavit-vlozheniya-k-email-uvedomleniyam-woocommerce для отслеживания отправленных писем и вложений.

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

СпособОписаниеПлюсыМинусы
Использование woocommerce_email_attachmentsФильтр для добавления файлов к письмамГибкость, работает со всеми emailНужно самостоятельно контролировать условия и пути
Плагин для PDF счетов (например, WooCommerce PDF Invoices & Packing Slips)Генерация и добавление счетов без кодаПростота установки, множество функцийМожет грузить систему, ограничение кастомизации
Использование webhook + внешняя генерация PDFГенерация PDF на отдельном сервисеНе нагружает сервер, масштабируемостьСложность настройки, зависит от сторонних сервисов
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее