Проблема: отсутствие автоматической отправки счетов-фактур в WooCommerce
По умолчанию WooCommerce не отправляет счета-фактуры покупателям автоматически после оформления заказа. Это вызывает необходимость ручной генерации и отправки документов, что неудобно и увеличивает нагрузку на службу поддержки.
Диагностика проблемы
Чтобы убедиться, что счета-фактуры не отправляются автоматически, выполните следующие шаги:
- Оформите тестовый заказ в магазине.
- Проверьте почту покупателя — отсутствует письмо с вложенным счетом-фактурой.
- Проверьте настройки WooCommerce и установленных плагинов: нет встроенной функции отправки PDF-счетов.
Решение: автоматическая генерация и отправка счетов-фактур через плагин и код
1. Установка плагина для генерации счетов-фактур
Рекомендуется использовать WooCommerce PDF Invoices & Packing Slips. Он позволяет автоматически создавать PDF-счета и прикреплять их к письмам WooCommerce.
2. Настройка плагина для автоматической отправки
- Установите и активируйте плагин.
- Перейдите в
WooCommerce > PDF Invoices. - Включите опцию Attach to emails и выберите, к каким письмам прикреплять счет (обычно – «Новый заказ» и «Завершенный заказ»).
- Настройте шаблон счета, если необходимо.
3. Добавление пользовательского кода для кастомизации отправки
Если нужно отправлять счет только после определенного статуса заказа, добавьте следующий код в functions.php вашей темы или в плагин-сниппет:
add_action('woocommerce_order_status_completed', 'send_invoice_on_order_complete', 20, 1);
function send_invoice_on_order_complete($order_id) {
if (!$order_id) return;
$order = wc_get_order($order_id);
if (!$order) return;
// Получаем объект плагина PDF Invoices
if (!class_exists('WooCommerce_PDF_Invoices')) return;
$pdf_invoice = WooCommerce_PDF_Invoices::instance();
// Генерируем PDF счет
$pdf_path = $pdf_invoice->get_invoice_pdf($order);
if (!$pdf_path) return;
// Отправляем письмо с вложением
$mailer = WC()->mailer();
$email = $mailer->emails['WC_Email_Customer_Completed_Order'];
if ($email) {
$email->attachments[] = $pdf_path;
$email->trigger($order_id);
// Удаляем вложение из массива, чтобы не повлиять на другие письма
array_pop($email->attachments);
}
}Проверка результата после внедрения
- Оформите новый тестовый заказ и переведите его статус в «Завершен».
- Проверьте почтовый ящик покупателя — должно прийти письмо с вложенным PDF-счетом.
- Откройте PDF, убедитесь, что данные заказа корректны.
Частые ошибки и их исправление
- Счет не прикрепляется к письму: проверьте, активирован ли плагин WooCommerce PDF Invoices & Packing Slips и включена ли опция прикрепления к нужным письмам.
- Функция
get_invoice_pdfне работает: возможно, в плагине изменилась реализация. Обратитесь к документации плагина или обновите его. - Письмо не отправляется после смены статуса: убедитесь, что хук
woocommerce_order_status_completedсрабатывает, и нет конфликтов с другими плагинами. - Проблемы с кодировкой или отображением PDF: настройте шаблон счета в плагине, проверьте наличие шрифтов и правильность данных.
Практические советы по безопасности и производительности
- Не храните PDF-файлы счетов в открытом доступе — используйте защищенные папки или временную генерацию.
- Для больших магазинов с высокой нагрузкой оптимизируйте процесс генерации PDF, чтобы не создавать нагрузку на сервер в момент отправки письма.
- Обновляйте плагины своевременно, чтобы избежать уязвимостей в генерации и отправке документов.
- Резервное копирование базы данных и файлов — обязательная мера при работе с документами и заказами.
Сравнение подходов к автоматической отправке счетов-фактур в WooCommerce
| Метод | Плюсы | Минусы | Рекомендуется для |
|---|---|---|---|
| Плагин WooCommerce PDF Invoices & Packing Slips | Быстрая установка, готовый функционал, шаблоны | Может перегружать сервер при большом объеме заказов | Малые и средние магазины |
| Кастомный код с использованием сторонних библиотек PDF | Гибкая кастомизация, оптимизация под задачи | Требует навыков разработки и поддержки | Крупные проекты с уникальными требованиями |
| Комбинированный подход (плагин + кастомизация) | Баланс простоты и гибкости | Необходима техническая поддержка | Большинство магазинов с нестандартными потребностями |