wpconsult.ru wordpress WP Consult

WooCommerce: автоматическое создание и отправка счетов-фактур после покупки

Диагностика задачи: зачем нужна автоматизация счетов-фактур в 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, поддержка и обновления на стороне разработчикаПример в статье
Комбинация плагинов и кодаГибкость, частичная автоматизацияСложность настройки, возможны конфликтыПлагин для генерации + собственный код для отправки
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее