Диагностика задачи: зачем отправлять данные 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 компромисс
| Подход | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Плагин интеграции | Простота настройки, поддержка обновлений | Может быть ограничен, нагрузка | Если есть готовое решение под задачу |
| Ручной код | Гибкость, точечное решение | Требуется поддержка, знание кода | При уникальных требованиях |
| Компромисс (плагин + код) | Быстрый старт, кастомизация | Может усложнить поддержку | Если нужна частичная автоматизация |