Почему возникает задача автоматического создания заказов из WPForms
Иногда стандартных возможностей WPForms и WooCommerce недостаточно, когда нужно создавать заказы на основе данных, введённых пользователем в кастомной форме. Например, для нестандартного процесса оформления заказа, консультации, предзаказа или комплексных услуг с индивидуальным расчётом. В этом случае автоматическое создание заказа по данным формы существенно экономит время и снижает ошибки при ручном вводе.
Диагностика проблемы: WPForms не создаёт заказ в WooCommerce автоматически
Если вы уже пытались связать WPForms и WooCommerce, но заказы не создаются, проверьте следующее:
- Подключен ли WooCommerce и активна ли его база данных.
- Формируются ли данные формы корректно (проверяйте
$_POSTили объект формы). - Используется ли правильный хук для обработки отправки формы.
- Есть ли ошибки PHP в логах при попытке создать заказ.
- Корректно ли назначены обязательные поля для создания заказа (например, ID товара, количество, данные покупателя).
Пошаговое решение: как автоматически создавать заказ WooCommerce из WPForms
1. Определяем форму и обрабатываем событие отправки
WPForms имеет хук wpforms_process_complete, который запускается по завершении отправки формы. Используем его для запуска логики создания заказа.
add_action('wpforms_process_complete', 'create_woocommerce_order_from_wpform', 10, 4);
function create_woocommerce_order_from_wpform($fields, $entry, $form_data, $entry_id) {
// Проверяем ID формы, если нужно
if ($form_data['id'] != 123) return; // заменить 123 на ID вашей формы
// Получаем значения из полей по ключам
$product_id = 0;
$quantity = 1;
$billing_email = '';
foreach ($fields as $field) {
switch ($field['name']) {
case 'product_id':
$product_id = intval($field['value']);
break;
case 'quantity':
$quantity = max(1, intval($field['value']));
break;
case 'email':
$billing_email = sanitize_email($field['value']);
break;
}
}
if (!$product_id || !$billing_email) return;
// Создаём заказ
$order = wc_create_order();
$order->add_product(wc_get_product($product_id), $quantity);
$order->set_billing_email($billing_email);
$order->calculate_totals();
$order->save();
}2. Обработка дополнительных данных покупателя
Если форма собирает больше информации (имя, телефон, адрес), назначьте их в заказ через методы set_billing_first_name, set_billing_phone и т.д.
$order->set_billing_first_name($first_name);
$order->set_billing_phone($phone);
// Добавляйте остальные поля аналогично3. Отправка уведомления и проверка результата
WooCommerce автоматически отправляет уведомления о новом заказе, если они включены. Проверяйте наличие нового заказа в админке WooCommerce в разделе "Заказы" после отправки тестовой формы.
Проверка результата после внедрения
- Отправьте тестовую форму WPForms с валидными данными.
- Зайдите в WooCommerce > Заказы и убедитесь, что появился новый заказ с введёнными данными.
- Проверьте, что сумма, количество и данные покупателя заполнены корректно.
- Если включены email-уведомления — проверьте их получение.
Частые ошибки и их исправление
- Заказы не создаются: пропущена проверка ID формы или нет обязательных данных (product_id, email). Проверьте соответствие полей формы и кода.
- Ошибки PHP при создании заказа: убедитесь, что WooCommerce активен и функции доступны. Включите WP_DEBUG и смотрите логи.
- Неверные данные в заказе: проверьте правильность индексов полей и их названий в форме WPForms.
- Заказы создаются, но не отправляются письма: проверьте настройки WooCommerce, SMTP и логи отправки почты.
Практические советы по безопасности и производительности
- Используйте фильтрацию и санитизацию данных из формы перед использованием в заказе (
sanitize_email,intval,sanitize_text_field). - Обрабатывайте только нужные формы, чтобы не создавать лишние заказы.
- Добавьте логгирование ошибок создания заказов для отладки (например, через
error_logили плагины логирования). - Если планируется массовое создание заказов, оптимизируйте код, избегайте лишних запросов к базе.
Сравнение вариантов автоматического создания заказов из WPForms
| Метод | Плюсы | Минусы | Компромисс |
|---|---|---|---|
Кастомный PHP-код на хуке wpforms_process_complete | Полный контроль, гибкость, без сторонних плагинов | Требуется знание PHP, возможны ошибки, поддержка на вас | Можно начать с простого кода и расширять |
| Плагины интеграции WPForms-WooCommerce (если есть) | Упрощённая настройка, готовые функции | Могут быть платными и ограниченными, зависят от разработчика | Использовать для типовых задач, кастомизировать кодом |
| Использование Webhook и внешних сервисов | Отделение логики, интеграция с CRM и ERP | Задержки, возможны ошибки при передаче, сложность | Для крупных проектов с внешним учётом заказов |