Почему стандартная интеграция WPForms и WooCommerce не всегда решает задачу
WPForms отлично подходит для создания кастомных форм, а WooCommerce — для управления магазином. Но часто возникает необходимость добавить собственные поля на страницу оформления заказа, собрать данные через WPForms и автоматически передать их в заказ WooCommerce. Стандартной функциональности в WPForms для этого нет, нужно дорабатывать вручную.
Типичные сценарии использования
- Сбор информации о подарочной упаковке, сообщениях для получателя.
- Передача данных для доставки, например, этаж, код домофона.
- Согласия, комментарии или дополнительные опции, которые не входят в стандартный набор WooCommerce.
Диагностика проблемы: поля формы не передаются в заказ WooCommerce
Если вы настроили WPForms для сбора дополнительных данных, но они не отображаются в деталях заказа или в админке WooCommerce, значит, данных не хватает на уровне передачи или сохранения.
- Проверьте, что форма действительно отправляется и данные доступны в
$_POST. - Убедитесь, что хук, который добавляет поля в заказ, корректно подключен и вызывается.
- Проверьте, что имена полей в WPForms совпадают с теми, которые вы используете в обработке.
Пошаговое решение: как передать данные из WPForms в заказ WooCommerce
1. Добавляем дополнительные поля в форму WPForms
Создайте форму с нужными полями (например, gift_message, floor). Запомните ID формы.
2. Выводим форму на странице оформления заказа
В шаблоне WooCommerce checkout (обычно checkout/form-checkout.php или через хук) добавьте WPForms шорткод с нужным ID:
echo do_shortcode('[wpforms id="123" title="false" description="false"]');Или через PHP:
if ( function_exists('wpforms_display') ) {
wpforms_display( 123 );
}3. Обрабатываем отправку формы и добавляем данные в заказ
Используем хук WooCommerce woocommerce_checkout_create_order. В обработчике достаем данные из $_POST и добавляем их в метаданные заказа.
add_action('woocommerce_checkout_create_order', 'add_wpforms_data_to_order', 20, 2);
function add_wpforms_data_to_order($order, $data) {
if ( isset($_POST['wpforms']['fields']['gift_message']) ) {
$gift_message = sanitize_text_field($_POST['wpforms']['fields']['gift_message']);
$order->update_meta_data('gift_message', $gift_message);
}
if ( isset($_POST['wpforms']['fields']['floor']) ) {
$floor = sanitize_text_field($_POST['wpforms']['fields']['floor']);
$order->update_meta_data('floor', $floor);
}
}4. Отображаем дополнительные поля в админке заказа
Чтобы видеть эти данные в админке WooCommerce, подключите хук woocommerce_admin_order_data_after_billing_address:
add_action('woocommerce_admin_order_data_after_billing_address', 'display_custom_order_meta', 10, 1);
function display_custom_order_meta($order){
echo '<p><strong>Сообщение для подарка:</strong> ' . esc_html($order->get_meta('gift_message')) . '</p>';
echo '<p><strong>Этаж:</strong> ' . esc_html($order->get_meta('floor')) . '</p>';
}Проверка результата
- Откройте страницу оформления заказа, убедитесь, что форма WPForms отображается.
- Заполните форму и оформите заказ.
- В админке WooCommerce откройте созданный заказ и найдите в блоке с данными клиента значения полей
gift_messageиfloor. - При необходимости проверьте данные в базе через phpMyAdmin — они хранятся в таблице
wp_postmetaс ключамиgift_messageиfloor.
Частые ошибки и как исправить
- Данные не передаются: проверьте имена полей и структуру массива
$_POST. WPForms иногда использует вложенную структуру$_POST['wpforms']['fields']. - Хук не срабатывает: убедитесь, что код добавлен в functions.php активной темы или в плагин, и что при создании заказа вызывается
woocommerce_checkout_create_order. - Данные не отображаются в админке: проверьте правильность использования функции
get_metaи хука вывода. - Форма не показывается на странице оформления: проверьте, что шорткод с правильным ID и что WPForms активен.
Практические советы по безопасности и производительности
- Всегда используйте функции очистки данных, например,
sanitize_text_field, чтобы избежать XSS-уязвимостей. - Не загружайте тяжелые формы WPForms на странице оформления, если они не нужны — используйте условные проверки.
- Для сложных интеграций рассмотрите возможность кеширования результатов или использования AJAX, чтобы снизить нагрузку.
- Для массовых магазинов с большим количеством заказов настройте регулярную очистку неактуальных метаданных.
Сравнение вариантов интеграции дополнительных полей в WooCommerce
| Способ | Плюсы | Минусы |
|---|---|---|
| Добавление полей через WPForms и обработка в хуке WooCommerce | Гибкость, возможность использовать мощные возможности WPForms | Необходимы знания PHP, может усложнить поддержку |
| Использование плагинов WooCommerce Checkout Field Editor | Простая настройка, визуальный интерфейс | Ограниченная кастомизация, дополнительные расходы |
| Создание собственных полей через кастомный плагин | Максимальный контроль и производительность | Требует опыта разработки, дольше в реализации |