wpforms.ru wordpress WPForms.ru

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

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

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

Для проверки, что данные формы действительно не попадают в заказ:

  • Оформите тестовый заказ через форму с дополнительными полями;
  • В административной панели WooCommerce откройте детали заказа и проверьте наличие пользовательских полей;
  • Если поля отсутствуют, значит интеграция не настроена.

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

1. Создайте пользовательские поля заказа в WooCommerce

Для хранения данных создайте мета-поля заказа. Это можно сделать программно или с помощью плагина, например, Clearfy Pro (раздел расширения WooCommerce). Для примера добавим поле «delivery_note» через хук woocommerce_checkout_update_order_meta:

add_action('woocommerce_checkout_update_order_meta', 'add_custom_order_meta');
function add_custom_order_meta($order_id) {
    if (!empty($_POST['delivery_note'])) {
        update_post_meta($order_id, 'delivery_note', sanitize_text_field($_POST['delivery_note']));
    }
}

Однако в нашем сценарии данные приходят не из стандартной формы checkout, а из WPForms, поэтому следующий шаг — получить эти данные после отправки формы.

2. Получите данные из WPForms и сохраните их в заказ WooCommerce

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

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 вашей формы
    $target_form_id = 123;
    if ($form_data['id'] != $target_form_id) {
        return;
    }

    // Получаем значение поля из WPForms (замените на реальный ключ поля)
    $delivery_note = '';
    foreach ($fields as $field) {
        if ($field['name'] === 'delivery_note') {
            $delivery_note = sanitize_text_field($field['value']);
            break;
        }
    }

    // Получаем ID созданного заказа (если создаете заказ вручную)
    // Или передайте данные в существующий заказ
    $order_id = 0; // сюда нужно подставить реальный ID заказа

    if ($order_id && $delivery_note) {
        update_post_meta($order_id, 'delivery_note', $delivery_note);
    }
}

Если вы создаёте заказ автоматически после отправки WPForms, то после создания заказа сохраните мета-данные. Если заказ создается отдельно, можно использовать сессии или другой механизм передачи.

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

Чтобы видеть поле «delivery_note» в админке заказа, добавьте код для отображения мета-информации:

add_action('woocommerce_admin_order_data_after_billing_address', 'display_delivery_note_in_admin_order', 10, 1);
function display_delivery_note_in_admin_order($order) {
    $delivery_note = get_post_meta($order->get_id(), 'delivery_note', true);
    if ($delivery_note) {
        echo '<p><strong>Примечание к доставке:</strong> ' . esc_html($delivery_note) . '</p>';
    }
}

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

  • Отправьте тестовую форму WPForms с заполненным полем «delivery_note»;
  • Если заказ создается автоматически, откройте его детали в WooCommerce и убедитесь, что поле «Примечание к доставке» отображается;
  • Если заказ создается вручную, проверьте, что данные сохраняются в мета-поле через код;
  • Проверьте также наличие поля в письмах, если требуется.

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

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

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

  • Используйте проверку nonce и права пользователя, если данные могут изменяться из админки;
  • Сохраняйте только необходимые данные, минимизируйте нагрузку на базу;
  • Для больших объемов данных используйте сериализацию и отдельные таблицы, если стандартные мета-поля не подходят;
  • Для отложенного создания заказов используйте очереди, чтобы не блокировать отправку формы;
  • Тестируйте нагрузку при большом количестве заказов и отправок.

Сравнение подходов: плагин vs код vs компромисс

ПодходПлюсыМинусыКогда использовать
Плагин интеграцииПростота настройки, поддержка обновленийМожет быть ограничен, нагрузкаЕсли есть готовое решение под задачу
Ручной кодГибкость, точечное решениеТребуется поддержка, знание кодаПри уникальных требованиях
Компромисс (плагин + код)Быстрый старт, кастомизацияМожет усложнить поддержкуЕсли нужна частичная автоматизация
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше