WPForms и WooCommerce: как передать дополнительные поля из формы в заказ

Почему стандартная интеграция 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>';
}

Проверка результата

  1. Откройте страницу оформления заказа, убедитесь, что форма WPForms отображается.
  2. Заполните форму и оформите заказ.
  3. В админке WooCommerce откройте созданный заказ и найдите в блоке с данными клиента значения полей gift_message и floor.
  4. При необходимости проверьте данные в базе через 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Простая настройка, визуальный интерфейсОграниченная кастомизация, дополнительные расходы
Создание собственных полей через кастомный плагинМаксимальный контроль и производительностьТребует опыта разработки, дольше в реализации
WPForms динамические поля с расчетом значений в WordPress
20.03.2026
WPForms: как автоматически сохранять данные форм в базу данных WordPress
18.12.2025
WPForms: как реализовать авторизацию через SMS без пароля в WordPress
03.06.2026
WPForms и ответ на AJAX-запросы без перезагрузки страницы в WordPress
12.12.2025
Как добавить собственные поля в WPForms и обработать их в WordPress
23.11.2025