wpforms.ru wordpress WPForms.ru

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

Задача: вывести данные из 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Интегрируется с нативными полямиТребует кастомизации формы и шаблоновЕсли нужна единообразная валидация
×
День SEO
Время сделать подарок своему WordPress!
-20% на премиум

шаблоны и плагины

Порадуй свой сайт ⋙