wpdownload.ru wordpress WPDownload.ru

WooCommerce: автоматическое создание и отправка накладных после оформления заказа

Диагностика задачи: зачем нужна автоматизация накладных

В интернет-магазинах на WooCommerce часто возникает необходимость автоматически формировать накладные (товарные чеки) и отправлять их клиентам после оформления заказа. Это экономит время, исключает ошибки ручного оформления и повышает уровень сервиса. Ручное создание накладных неудобно при большом потоке заказов и требует дополнительных плагинов или кастомного кода.

Как автоматически создавать PDF накладную в WooCommerce

Для автоматического создания PDF накладной можно использовать библиотеку FPDF или TCPDF. В примере ниже покажу, как сгенерировать простую PDF накладную на основе данных заказа.

Пример кода генерации накладной

add_action('woocommerce_order_status_completed', 'generate_and_send_invoice_pdf', 10, 1);

function generate_and_send_invoice_pdf($order_id) {
    if (!$order_id) return;
    
    $order = wc_get_order($order_id);
    if (!$order) return;

    // Подключаем библиотеку FPDF
    if (!class_exists('FPDF')) {
        require_once __DIR__ . '/lib/fpdf/fpdf.php'; // путь к FPDF
    }

    $pdf = new FPDF();
    $pdf->AddPage();
    $pdf->SetFont('Arial', 'B', 16);
    $pdf->Cell(40, 10, 'Накладная к заказу #' . $order->get_order_number());

    $pdf->Ln(20);
    $pdf->SetFont('Arial', '', 12);
    $pdf->Cell(0, 10, 'Клиент: ' . $order->get_billing_first_name() . ' ' . $order->get_billing_last_name());
    $pdf->Ln(10);
    $pdf->Cell(0, 10, 'Телефон: ' . $order->get_billing_phone());

    $pdf->Ln(15);
    $pdf->Cell(80, 10, 'Товар', 1);
    $pdf->Cell(30, 10, 'Количество', 1);
    $pdf->Cell(40, 10, 'Цена', 1);
    $pdf->Ln();

    foreach ($order->get_items() as $item) {
        $name = $item->get_name();
        $qty = $item->get_quantity();
        $total = wc_price($item->get_total());

        $pdf->Cell(80, 10, $name, 1);
        $pdf->Cell(30, 10, $qty, 1);
        $pdf->Cell(40, 10, $total, 1);
        $pdf->Ln();
    }

    $pdf->Ln(10);
    $pdf->Cell(0, 10, 'Итого: ' . $order->get_formatted_order_total());

    // Сохраняем PDF во временную папку
    $upload_dir = wp_upload_dir();
    $file_path = $upload_dir['basedir'] . '/invoices/invoice-' . $order_id . '.pdf';

    if (!file_exists(dirname($file_path))) {
        wp_mkdir_p(dirname($file_path));
    }

    $pdf->Output('F', $file_path);

    // Отправка накладной по email
    send_invoice_email_with_attachment($order, $file_path);
}

function send_invoice_email_with_attachment($order, $file_path) {
    $mailer = WC()->mailer();
    $recipient = $order->get_billing_email();
    $subject = 'Ваша накладная к заказу #' . $order->get_order_number();
    $message = 'Здравствуйте! В приложении вы найдете накладную по вашему заказу.';

    // Создаем email
    $email = $mailer->emails['WC_Email_Customer_Completed_Order'];
    $headers = array('Content-Type: text/html; charset=UTF-8');

    // Используем wp_mail с вложением
    wp_mail($recipient, $subject, $message, $headers, array($file_path));
}

Пошаговое решение

  1. Скачайте и подключите библиотеку FPDF в папку вашего плагина или темы (https://www.fpdf.org/).
  2. Добавьте код из примера в functions.php вашей темы или в кастомный плагин.
  3. Убедитесь, что директория wp-content/uploads/invoices доступна для записи.
  4. При смене статуса заказа на "завершен" автоматически создается PDF с накладной и отправляется на email клиента.

Как проверить, что всё работает

  • Создайте тестовый заказ в WooCommerce и переведите его в статус "Завершен".
  • Проверьте папку wp-content/uploads/invoices — должен появиться PDF файл с именем invoice-{order_id}.pdf.
  • Проверьте почту клиента — должен прийти email с вложенной накладной.
  • Откройте PDF и убедитесь, что данные заказа корректны.

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

  • FPDF не подключена или путь указан неверно — ошибка загрузки класса. Проверьте путь в require_once и наличие библиотеки.
  • Папка для накладных недоступна для записи — PDF не сохраняется. Создайте папку вручную или используйте wp_mkdir_p.
  • Email не отправляется — проверьте настройки почты WordPress, используйте SMTP-плагин для надежной доставки.
  • Некорректное отображение символов в PDF — используйте UTF-8 и шрифты, поддерживающие кириллицу (в FPDF нужно подключать специальные шрифты).

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

  • Не храните PDF в публичных папках без защиты — можно ограничить доступ через .htaccess или хранить во внепубличных директориях.
  • Для больших магазинов лучше использовать специализированные плагины с кешированием и очередями генерации PDF.
  • Отправку email выполняйте асинхронно (через WP-Cron или внешние сервисы), чтобы не замедлять оформление заказа.
  • Проверяйте права доступа и используйте nonce при интеграции с фронтендом.

Сравнение вариантов реализации

СпособПлюсыМинусыПример
Кастомный код с FPDFПолный контроль, бесплатныйТребует знаний, поддержка шрифтовПример в статье
Плагин WooCommerce PDF InvoicesБыстро, много функцийМожет быть избыточным, платные расширенияClearfy Pro (оптимизация сайта)
Внешние сервисы (API)Мощные шаблоны, стабильностьСтоимость, зависимость от внешних сервисовAPI-интеграции PDF генерации
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше