Задача: вывести данные из WPForms в деталях заказа WooCommerce
Частая задача для интернет-магазинов на WooCommerce — собрать дополнительные сведения при оформлении заказа с помощью WPForms и отобразить эти данные в админке и на странице заказа для клиента. Например, это может быть форма с дополнительными опциями, пожеланиями, инструкциями по доставке и т.д. В стандартном наборе WooCommerce такой функционал отсутствует, но можно реализовать его с помощью пользовательских полей и хуков.
Диагностика проблемы
Если вы создали форму WPForms и внедрили её на страницу оформления заказа WooCommerce, но данные не передаются в заказ, скорее всего:
- Форма не связана с заказом через ID или пользовательские мета-поля.
- WPForms не сохраняет данные в пользовательские мета-поля WooCommerce.
- Отсутствует код для отображения сохранённых данных в админке и на фронтенде.
Нужно проверить, что данные формы действительно отправляются и доступны через $_POST при оформлении заказа. Для этого включите отладку и проверьте содержимое $_POST['wpforms'] (или по ID формы):
add_action('woocommerce_checkout_process', function() {
error_log(print_r($_POST['wpforms'], true));
});Если данных там нет — проверьте, что форма корректно встроена и отправляется через страницу оформления заказа.
Пошаговое решение
1. Внедряем форму WPForms в страницу оформления заказа
Используйте шорткод формы WPForms внутри кастомного поля, заметки или в шаблоне WooCommerce:
echo do_shortcode('[wpforms id="123"]'); // 123 - ID вашей формы2. Сохраняем отправленные данные формы в мета-поля заказа
Подпишитесь на хук woocommerce_checkout_update_order_meta для сохранения данных из формы WPForms в мета-поля WooCommerce:
add_action('woocommerce_checkout_update_order_meta', function($order_id) {
if (!empty($_POST['wpforms']['fields'])) {
$fields = $_POST['wpforms']['fields'];
// Например, поле с ID 4
if (isset($fields[4])) {
update_post_meta($order_id, '_wpforms_field_4', sanitize_text_field($fields[4]));
}
// Добавьте сохранение других нужных полей
}
});3. Отображаем данные WPForms в админке WooCommerce
Для отображения дополнительных данных в мета-боксе заказа используйте хук woocommerce_admin_order_data_after_billing_address:
add_action('woocommerce_admin_order_data_after_billing_address', function($order) {
$value = get_post_meta($order->get_id(), '_wpforms_field_4', true);
if ($value) {
echo '<p><strong>Дополнительная информация из формы WPForms:</strong> ' . esc_html($value) . '</p>';
}
});4. Вывод данных формы WPForms на странице «Мои заказы» для клиента
Добавьте следующий код в functions.php темы, чтобы показать данные в деталях заказа на фронтенде:
add_action('woocommerce_order_details_after_order_table', function($order) {
$value = get_post_meta($order->get_id(), '_wpforms_field_4', true);
if ($value) {
echo '<h3>Дополнительная информация из формы</h3><p>' . esc_html($value) . '</p>';
}
});Проверка результата после внедрения
- Создайте тестовый заказ, заполнив WPForms в оформлении заказа.
- В админке откройте заказ — дополнительные данные должны отображаться под адресом плательщика.
- Зайдите под клиентом на страницу заказа — данные формы должны быть видны.
- Если данных нет, проверьте логи ошибок и данные
$_POST.
Частые ошибки и как исправить
- Данные формы не передаются в
$_POST: возможно, форма встраивается через AJAX или на отдельной странице — убедитесь, что форма находится непосредственно в оформлении заказа. - Неправильные ID полей WPForms: проверьте ID полей в админке WPForms и используйте их в коде.
- Валидация и очистка данных отсутствуют: всегда используйте
sanitize_text_fieldили другие функции очистки, чтобы избежать XSS и повреждения данных. - Кэширование страниц мешает отображению данных: отключите кэширование для страницы оформления заказа и страницы заказа клиента.
Практические советы по безопасности и производительности
- Используйте nonce и проверяйте права пользователя при работе с данными заказа.
- Не сохраняйте в мета-поля данные, которые не нужны для обработки заказа — избегайте излишней нагрузки.
- Минимизируйте количество запросов к базе, кэшируйте результаты при необходимости.
- Для более сложных форм и интеграций рассмотрите интеграцию через WPForms Webhooks с собственным обработчиком, чтобы разгрузить сервер.
Сравнение подходов сохранения данных WPForms в WooCommerce
| Метод | Преимущества | Недостатки | Рекомендации |
|---|---|---|---|
Сохранение через woocommerce_checkout_update_order_meta | Простота, прямое сохранение в заказ | Зависит от правильной передачи данных в POST | Использовать для простых форм |
| Использование WPForms Webhook и кастомный обработчик | Гибкость, асинхронность | Сложнее в реализации, требует внешнего сервера | Для сложных бизнес-процессов |
| Интеграция через пользовательские поля WooCommerce Checkout | Интегрируется с нативными полями | Требует кастомизации формы и шаблонов | Если нужна единообразная валидация |