Диагностика задачи: зачем нужна автоматизация счетов-фактур в WooCommerce
Многие владельцы интернет-магазинов на WooCommerce сталкиваются с необходимостью выдачи счетов-фактур покупателям сразу после оплаты заказа. Ручное формирование и отправка документов занимает много времени и повышает риск ошибок. Автоматизация процесса позволяет:
- Сэкономить время на документообороте;
- Гарантировать своевременную отправку счетов;
- Уменьшить количество ошибок в данных;
- Повысить уровень сервиса для клиентов.
Часто пользователи спрашивают: как автоматически создавать PDF-счет и отправлять его на email покупателя сразу после подтверждения заказа?
Пошаговое решение: как настроить автоматическое создание и отправку счетов в WooCommerce
1. Выбор способа генерации счетов-фактур
Существует несколько вариантов:
- Использовать готовые плагины (например, Clearfy Pro поддерживает интеграцию с WooCommerce для генерации документов);
- Написать кастомный код с использованием библиотеки для создания PDF (например, TCPDF или MPDF);
- Комбинировать плагины с кастомными функциями для тонкой настройки.
2. Пример создания PDF-счета с помощью TCPDF и автоматическая отправка
Для примера приведём упрощённый код, который генерирует PDF после смены статуса заказа на "завершён" и отправляет его покупателю по email.
add_action('woocommerce_order_status_completed', 'send_invoice_pdf_to_customer', 10, 1);
function send_invoice_pdf_to_customer($order_id) {
if (!$order_id) return;
$order = wc_get_order($order_id);
if (!$order) return;
// Подключаем TCPDF
if (!class_exists('TCPDF')) {
require_once WP_PLUGIN_DIR . '/tcpdf/tcpdf.php';
}
// Создаём PDF
$pdf = new TCPDF();
$pdf->AddPage();
$html = '<h1>Счет-фактура №' . $order->get_id() . '</h1>';
$html .= '<p>Покупатель: ' . $order->get_billing_first_name() . ' ' . $order->get_billing_last_name() . '</p>';
$html .= '<p>Дата заказа: ' . $order->get_date_created()->date('Y-m-d') . '</p>';
$html .= '<table border="1" cellpadding="4"><tr><th>Товар</th><th>Количество</th><th>Цена</th></tr>';
foreach ($order->get_items() as $item) {
$product = $item->get_product();
$name = $product ? $product->get_name() : $item->get_name();
$qty = $item->get_quantity();
$price = wc_price($item->get_total() / $qty);
$html .= '<tr><td>' . $name . '</td><td>' . $qty . '</td><td>' . $price . '</td></tr>';
}
$html .= '</table>';
$html .= '<p>Итого: ' . $order->get_formatted_order_total() . '</p>';
$pdf->writeHTML($html, true, false, true, false, '');
// Сохраняем во временный файл
$upload_dir = wp_upload_dir();
$file_path = $upload_dir['basedir'] . '/invoices/invoice-' . $order_id . '.pdf';
wp_mkdir_p(dirname($file_path));
$pdf->Output($file_path, 'F');
// Отправляем письмо с вложением
$to = $order->get_billing_email();
$subject = 'Ваш счет-фактура по заказу #' . $order_id;
$message = 'Здравствуйте! Во вложении ваш счет-фактура.';
$headers = array('Content-Type: text/html; charset=UTF-8');
$attachments = array($file_path);
wp_mail($to, $subject, $message, $headers, $attachments);
}3. Настройка прав доступа и создание папки для счетов
Обязательно создайте папку wp-content/uploads/invoices с правами на запись, чтобы PHP мог сохранять PDF-файлы. Для безопасности ограничьте доступ к этой папке через .htaccess или web.config, чтобы сторонние не могли скачивать счета напрямую.
Проверка результата после внедрения
- Оформите тестовый заказ и оплатите его;
- Проверьте, что статус заказа сменился на «завершён»;
- Убедитесь, что в папке
wp-content/uploads/invoicesпоявился PDF-файл с номером заказа; - Проверьте почтовый ящик покупателя: письмо с вложенным PDF должно быть доставлено;
- Откройте PDF, чтобы проверить корректность данных (названия товаров, количество, сумма).
Частые ошибки и как их исправить
- Ошибка «класс TCPDF не найден»: убедитесь, что библиотека TCPDF установлена и путь подключения правильный. TCPDF можно добавить как composer-зависимость или вручную загрузить в папку плагина.
- Письма не отправляются: проверьте настройки SMTP на сервере, установите плагин для SMTP (например, WP Mail SMTP), чтобы избежать попадания писем в спам.
- Нет папки для сохранения PDF или нет прав на запись: создайте папку
invoicesв uploads и установите chmod 755/775. - PDF создаётся, но пустой или с ошибками разметки: проверьте передаваемый HTML, корректность CSS и отсутствие ошибок в коде генерации.
- Проблемы с кодировкой в PDF: установите правильный шрифт и кодировку в TCPDF, используйте UTF-8.
Практические советы по безопасности и производительности
- Храните счета в недоступной из интернета папке, либо защитите её через .htaccess:
Order deny,allow Deny from all - Для больших магазинов с массовой генерацией документов используйте очередь (WP-Cron или внешние cron-задачи), чтобы разгрузить сервер и не блокировать создание PDF при оформлении заказа.
- Ограничьте размер и сложность PDF, чтобы не перегружать ресурсы хостинга.
- Используйте кеширование email-рассылок и подключайте SMTP-сервисы для повышения надежности доставки.
Сравнение вариантов решения задачи
| Метод | Плюсы | Минусы | Пример |
|---|---|---|---|
| Готовый плагин (Clearfy Pro) | Быстрая настройка, поддержка, интеграция с WooCommerce | Платный, ограниченная кастомизация | Clearfy Pro |
| Кастомный код с TCPDF | Полный контроль, можно адаптировать под любые требования | Требует навыков PHP, поддержка и обновления на стороне разработчика | Пример в статье |
| Комбинация плагинов и кода | Гибкость, частичная автоматизация | Сложность настройки, возможны конфликты | Плагин для генерации + собственный код для отправки |