Диагностика задачи: зачем автоматизировать создание сертификатов
В интернет-магазинах на WooCommerce часто требуется выдавать покупателям сертификаты (подарочные, гарантийные, обучающие курсы и пр.) после оформления заказа. Ручная генерация и рассылка сертификатов занимает много времени и увеличивает вероятность ошибок. Автоматизация процесса сгенерирует PDF-сертификаты индивидуально для каждого заказа и отправит их на почту покупателя.
Основные этапы решения задачи
- Отслеживание статуса оплаты заказа (обычно "завершен" или "обработан").
- Генерация PDF-сертификата с уникальными данными (имя клиента, номер заказа, дата и пр.).
- Прикрепление PDF к письму и отправка клиенту.
Практическая реализация: пример кода генерации и отправки сертификата
Подключение библиотеки для создания PDF
Для генерации PDF используем TCPDF — популярную библиотеку для PHP. Скачайте и разместите её в папке плагина или темы.
Хук на статус заказа и генерация сертификата
add_action('woocommerce_order_status_completed', 'generate_and_send_certificate', 10, 1);function generate_and_send_certificate($order_id) { if (!$order_id) { return; } $order = wc_get_order($order_id); if (!$order) { return; } // Подключаем TCPDF require_once get_template_directory() . '/tcpdf/tcpdf.php'; // Создаем PDF $pdf = new TCPDF(); $pdf->AddPage(); $pdf->SetFont('helvetica', '', 12); $customer_name = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name(); $order_number = $order->get_order_number(); $date = $order->get_date_created()->date('d.m.Y'); $content = "<h1>Сертификат покупателя</h1>" . "<p>Дорогой(ая) {$customer_name},</p>" . "<p>Благодарим за покупку. Ваш номер заказа: {$order_number} от {$date}.</p>" . "<p>Этот сертификат подтверждает ваше право на использование приобретенного продукта.</p>"; $pdf->writeHTML($content, true, false, true, false, ''); // Сохраняем во временный файл $upload_dir = wp_upload_dir(); $file_path = $upload_dir['basedir'] . '/certificates/certificate_order_' . $order_number . '.pdf'; if (!file_exists(dirname($file_path))) { wp_mkdir_p(dirname($file_path)); } $pdf->Output($file_path, 'F'); // Отправка письма с вложением $to = $order->get_billing_email(); $subject = 'Ваш сертификат по заказу #' . $order_number; $message = 'Здравствуйте ' . $customer_name . ', в приложении вы найдете ваш сертификат.'; $headers = array('Content-Type: text/html; charset=UTF-8'); $attachments = array($file_path); wp_mail($to, $subject, $message, $headers, $attachments);}Проверка результата после внедрения
- Оформите тестовый заказ в WooCommerce и переведите его в статус "Завершен".
- Проверьте, что в папке
wp-content/uploads/certificates/появился PDF-файл с именем сертификата. - Проверьте входящую почту покупателя – должно прийти письмо с вложением сертификата.
- Откройте PDF и убедитесь, что данные заказа и покупателя корректны.
Частые ошибки и как их исправить
- Ошибка подключения TCPDF: проверьте путь в
require_once, путь должен совпадать с расположением библиотеки. - Папка для сертификатов не создаётся: убедитесь, что у папки
wp-content/uploadsесть права на запись, добавьтеwp_mkdir_p()для создания папки. - Письмо не отправляется или приходит без вложения: проверьте настройки почты сервера, возможно, нужно настроить SMTP через плагин (например, WP Mail SMTP).
- PDF пустой или с ошибками: проверьте правильность HTML в
writeHTML()и корректность данных из заказа.
Проверочный чек-лист для отладки
- Подключена и доступна библиотека TCPDF.
- Папка для хранения сертификатов существует и доступна для записи.
- Хук
woocommerce_order_status_completedсрабатывает корректно. - Формат PDF читается в популярных просмотрщиках.
- Почтовая функция
wp_mailотправляет письма с вложением.
Альтернативные варианты: плагины против кастомного кода
| Вариант | Преимущества | Недостатки |
|---|---|---|
| Плагин генерации сертификатов (например, WooCommerce PDF Invoices) | Быстрая установка, готовые шаблоны, настройка через UI | Меньшая гибкость, возможные избыточные функции, платные расширения |
| Кастомный код на PHP с TCPDF | Максимальный контроль, интеграция с бизнес-логикой, возможность кастомизации | Требует навыков программирования, поддержка кода на вас |
Практические советы по безопасности и производительности
- Не храните сертификаты в публичных папках без защиты — используйте
htaccessдля ограничения доступа. - Не генерируйте сертификаты при каждом переходе страницы — делайте это один раз по событию.
- Кэшируйте результаты, если необходимо повторно показывать сертификат.
- Проверяйте email на валидность перед отправкой.
- Для отправки писем используйте SMTP с авторизацией, чтобы избежать попадания в спам.
- Для массовой рассылки сертификатов используйте очередь заданий с WP-Cron или внешними сервисами.