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

Диагностика проблемы: почему дополнительные поля из WPForms не появляются в заказах WooCommerce

При интеграции WPForms с WooCommerce часто возникает задача передать данные из дополнительных полей формы в заказ, чтобы хранить и отображать их в админке магазина и в уведомлениях. Чаще всего пользователи сталкиваются с ситуацией, когда дополнительные поля заполняются, но информация не попадает в заказ или не видна в админке.

Основные причины:

  • Отсутствие правильного связывания данных формы и объекта заказа WooCommerce
  • Недостаток кода для записи мета-данных заказа
  • Неправильные ключи или формат данных, не соответствующий WooCommerce
  • Конфликты с другими плагинами или темой

Пошаговое решение: автоматическая передача дополнительных полей из WPForms в заказ WooCommerce

1. Создайте форму WPForms с дополнительными полями

Добавьте необходимые обязательные поля и кастомные поля, например, текстовое поле "Номер паспорта" или "Дата доставки".

2. Получите ID формы и ID полей

Для передачи данных нужно знать ID формы и ID каждого поля. Их можно найти в редакторе WPForms — откройте форму и наведите курсор на поле, чтобы увидеть ID.

3. Добавьте обработчик для записи данных в заказ

В functions.php вашей темы (или в отдельном плагине) подключите следующий код. Он слушает событие создания заказа и переносит данные из отправленной формы WPForms в мета-данные заказа WooCommerce.

add_action('wpforms_process_complete', 'wpforms_to_woocommerce_order_meta', 10, 4);
function wpforms_to_woocommerce_order_meta($fields, $entry, $form_data, $entry_id) {
    // ID вашей формы WPForms
    $target_form_id = 123;
    if ($form_data['id'] != $target_form_id) {
        return;
    }

    // Получаем ID пользователя, если он авторизован
    $user_id = get_current_user_id();

    // Создаем заказ в WooCommerce
    $order = wc_create_order();

    // Добавляем товары или оставляем пустым — зависит от логики
    // $order->add_product(wc_get_product(456), 1); // пример добавления товара

    // Проходим по полям формы и сохраняем нужные
    foreach ($fields as $field_id => $field) {
        // Например, поле с ID 4 — "Номер паспорта"
        if ($field_id == 4) {
            $order->update_meta_data('_passport_number', sanitize_text_field($field['value']));
        }
        // Добавьте дополнительные поля по аналогии
        if ($field_id == 5) {
            $order->update_meta_data('_delivery_date', sanitize_text_field($field['value']));
        }
    }

    // Привязываем заказ к пользователю, если есть
    if ($user_id) {
        $order->set_customer_id($user_id);
    }

    // Завершаем и сохраняем заказ
    $order->calculate_totals();
    $order->save();
}

4. Отобразите дополнительные поля в админке WooCommerce

Чтобы видеть данные в заказах, добавьте их в мета-блок админки:

add_action('woocommerce_admin_order_data_after_billing_address', 'display_custom_order_meta_in_admin', 10, 1);
function display_custom_order_meta_in_admin($order) {
    $passport_number = $order->get_meta('_passport_number');
    $delivery_date = $order->get_meta('_delivery_date');

    if ($passport_number) {
        echo '<p><strong>Номер паспорта:</strong> ' . esc_html($passport_number) . '</p>';
    }
    if ($delivery_date) {
        echo '<p><strong>Дата доставки:</strong> ' . esc_html($delivery_date) . '</p>';
    }
}

Проверка результата после внедрения

Для проверки:

  • Отправьте тестовую форму WPForms с заполнением всех дополнительных полей.
  • Перейдите в WooCommerce → Заказы и откройте последний созданный заказ.
  • Проверьте наличие дополнительных полей в блоке с информацией о заказе (дополнительные мета-данные).
  • Если поля не отображаются, проверьте логи ошибок, а также корректность ID формы и полей.

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

  • Неправильный ID формы или полей: Убедитесь, что вы используете актуальные ID из WPForms. Обычно они меняются при редактировании.
  • Заказ не создается автоматически: Функция wc_create_order() создаст пустой заказ. Если логика требует добавления товаров, не забудьте $order->add_product(). Без товаров заказ может не отображаться в обычном списке.
  • Данные не сохраняются в мета: Проверьте, что функция update_meta_data вызывается корректно, и затем вызывается $order->save().
  • Поля не отображаются в админке: Проверьте, что хук woocommerce_admin_order_data_after_billing_address подключен и выводит данные. Также проверьте права доступа пользователя.
  • Конфликты с другими плагинами: Отключите плагины, которые могут изменять обработку заказов, чтобы исключить конфликт.

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

  • Обязательно фильтруйте и проверяйте данные с помощью sanitize_text_field и аналогичных функций, чтобы избежать XSS-уязвимостей.
  • Создавайте заказы только при полной и корректной отправке формы, иначе можно получить мусорные заказы.
  • Не создавайте заказ при каждом вызове хуков — проверяйте условия и уникальность, чтобы избежать дублирования.
  • Если форма заполняется часто, подумайте о кешировании данных и оптимизации запросов к базе.

Сравнение вариантов передачи дополнительных полей в WooCommerce

СпособПлюсыМинусыПример
Через wpforms_process_complete + wc_create_order Полный контроль, можно создавать заказ с нуля Нужно писать больше кода, риск дублирования заказов Пример из статьи
Использовать хуки WooCommerce (например, woocommerce_checkout_update_order_meta) Интеграция с оформлением заказа, меньше кода Требуется передавать данные из формы в checkout, сложнее связать с WPForms Подходит если WPForms только для сбора доп. инфо
Плагины интеграции WPForms и WooCommerce Простота настройки, готовый функционал Меньше гибкости, возможны конфликты и ограничения WPForms WooCommerce Integration (платные)
Защита форм WPForms от спама с помощью reCAPTCHA и CAPTCHA
06.01.2026
WPForms и отправка данных форм в Google Sheets: практическое руководство
02.03.2026
Как добавить поля калькулятора в WPForms с применением кода
13.04.2026
WPForms: как создать собственный тип поля с автоматической валидацией
23.03.2026
Оптимизация производительности WPForms за счёт правильной работы с базой данных
09.02.2026