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

Проблема: необходимость сбора дополнительных данных с корзины WooCommerce через WPForms

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

Диагностика проблемы

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

  • Отправьте тестовую форму WPForms с заполнением дополнительных полей;
  • Создайте заказ в WooCommerce, если форма создана для оформления заказа;
  • Перейдите в админку WooCommerce > Заказы и откройте созданный заказ;
  • Проверьте раздел метаданных заказа (Custom fields) — если поля отсутствуют, значит данные не передаются.

Пошаговое решение: добавление полей и их передача в заказ WooCommerce

Шаг 1. Создание полей в форме WPForms

Добавьте необходимые поля в форму WPForms (например, текстовое поле "Номер квартиры" или "Комментарий к доставке"). Запомните идентификаторы полей (Field IDs или имена).

Шаг 2. Добавление хука для передачи данных из WPForms в заказ WooCommerce

Для передачи данных из WPForms в заказ WooCommerce используем хук woocommerce_checkout_update_order_meta. Его срабатывание зависит от оформления заказа через стандартный WooCommerce Checkout, но если у вас отдельная форма WPForms, то нужно вызвать обновление метаданных при успешной отправке формы.

Пример кода, который добавляет поля из WPForms в метаданные заказа:

add_action('wpforms_process_complete', 'wpforms_add_custom_fields_to_woocommerce_order', 10, 4); function wpforms_add_custom_fields_to_woocommerce_order($fields, $entry, $form_data, $entry_id) {    if ($form_data['id'] != 123) { // замените 123 на ID вашей формы        return;    }    // Получаем ID последнего созданного заказа WooCommerce    $order_id = get_user_meta(get_current_user_id(), '_latest_order_id', true);    if (!$order_id) {        return;    }    // Пример: поле с ID 4 - номер квартиры    if (!empty($fields[4]['value'])) {        update_post_meta($order_id, '_apartment_number', sanitize_text_field($fields[4]['value']));    }    // Пример: поле с ID 5 - комментарий к доставке    if (!empty($fields[5]['value'])) {        update_post_meta($order_id, '_delivery_comment', sanitize_text_field($fields[5]['value']));    }}

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

Шаг 3. Автоматическое сохранение ID заказа для передачи в форму

Чтобы связать форму WPForms и заказ WooCommerce, добавьте код, который будет сохранять ID заказа пользователя в мета при создании заказа:

add_action('woocommerce_thankyou', 'save_latest_order_id_to_user_meta'); function save_latest_order_id_to_user_meta($order_id) {    if (!$order_id) {        return;    }    $user_id = get_current_user_id();    if ($user_id) {        update_user_meta($user_id, '_latest_order_id', $order_id);    }}

Шаг 4. Передача ID заказа в форму WPForms через скрытое поле

Добавьте в форму WPForms скрытое поле с именем, например, order_id. Значение этого поля можно установить динамически с помощью фильтра:

add_filter('wpforms_fields_show_value', 'populate_order_id_hidden_field', 10, 3); function populate_order_id_hidden_field($value, $field_id, $form_data) {    if ($form_data['id'] != 123) {        return $value;    }    if ($field_id == 6) { // замените 6 на ID скрытого поля        $order_id = get_user_meta(get_current_user_id(), '_latest_order_id', true);        if ($order_id) {            return $order_id;        }}

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

  • Оформите заказ в WooCommerce, авторизовавшись на сайте;
  • Перейдите на страницу с формой WPForms, которая должна заполнить дополнительные поля;
  • Отправьте форму;
  • В админке WooCommerce откройте заказ и убедитесь, что метаданные _apartment_number и _delivery_comment содержат введённые значения;
  • Если данные отображаются, значит интеграция работает корректно.

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

  • Неправильный ID формы или полей: Проверьте, что в коде совпадают ID формы и полей с реальными в WPForms.
  • Отсутствие сохранения ID заказа: Убедитесь, что пользователь авторизован и ID заказа сохраняется в мета пользователя.
  • Форма отправляется без авторизации: Для работы решения пользователь должен быть авторизован, иначе ID заказа не будет получен.
  • Недостаточно прав для обновления метаданных заказа: Проверьте, что код выполняется с нужными правами и в нужный момент.

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

  • Всегда используйте sanitize_text_field() или другие функции очистки данных перед сохранением в базу.
  • Не перегружайте форму лишними скрытыми полями без необходимости.
  • Кэширование ID заказа в мета пользователя уменьшает количество запросов к базе.
  • Для гостей реализуйте альтернативный способ передачи ID заказа, например, через сессию или URL-параметры, если нужно.

Итоговый чек-лист внедрения

  1. Добавить необходимые поля в WPForms;
  2. Добавить скрытое поле для передачи ID заказа в форму;
  3. Реализовать сохранение ID заказа в мета пользователя при оформлении заказа;
  4. Дописать фильтр для динамической подстановки ID заказа в форму;
  5. Добавить обработчик для сохранения данных формы в метаданные заказа;
  6. Проверить корректность ID и прав доступа;
  7. Тестировать отправку и проверять сохранение данных в заказах.
WPForms и WooCommerce: автоматическая передача данных обязательных полей из формы в заказ
03.05.2026
WPForms: создание и обработка форм регистрации пользователей с авторизацией в WordPress
10.05.2026
WPForms отладка выполнения формы при ошибках в JavaScript
14.03.2026
WPForms не отправляет формы при использовании AJAX: причины и пошаговое решение
24.05.2026
Как добавить поля калькулятора в WPForms с применением кода
13.04.2026