wpforms.ru wordpress WPForms.ru

WPForms и WooCommerce: как отображать данные заказов в формах

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

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

Типичные запросы пользователей:

  • Показать список последних заказов текущего пользователя в форме.
  • Автоматически подставлять детали конкретного заказа для подтверждения или изменения.
  • Создать кастомную форму с динамическими полями на основе данных заказов WooCommerce.

Как получить данные заказов WooCommerce для текущего пользователя

Для начала нужно получить ID текущего пользователя и его заказы с помощью стандартных функций WooCommerce и WordPress.

if ( is_user_logged_in() ) {
    $user_id = get_current_user_id();
    $customer_orders = wc_get_orders( array(
        'customer_id' => $user_id,
        'limit'       => 5, // количество заказов для вывода
        'orderby'     => 'date',
        'order'       => 'DESC',
    ) );
} else {
    $customer_orders = array();
}

Функция wc_get_orders возвращает массив объектов заказов WC_Order. Получив их, можно обращаться к данным заказа — например, номер, дата, статус, сумма.

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

WPForms поддерживает динамическое заполнение полей через хук wpforms_process_before_send или через пользовательские фильтры для значений полей. Для вывода списка заказов можно сгенерировать HTML и передать его в поле типа HTML или в выпадающий список.

Пример добавления динамического списка заказов в поле выпадающего списка (select):

add_filter( 'wpforms_field_select_choices', 'populate_orders_select', 10, 3 );
function populate_orders_select( $choices, $field_id, $form_data ) {
    // Замените 123 на ID вашей формы и 4 на ID поля select
    if ( $form_data['id'] == 123 && $field_id == 4 ) {
        $choices = array();
        if ( is_user_logged_in() ) {
            $user_id = get_current_user_id();
            $orders = wc_get_orders( array(
                'customer_id' => $user_id,
                'limit'       => 10,
                'orderby'     => 'date',
                'order'       => 'DESC',
            ) );
            foreach ( $orders as $order ) {
                $order_number = $order->get_order_number();
                $order_date = $order->get_date_created()->date('Y-m-d');
                $choices[] = array(
                    'label' => "Заказ #{$order_number} от {$order_date}",
                    'value' => $order->get_id(),
                );
            }
        } else {
            $choices[] = array('label' => 'Войдите, чтобы увидеть заказы', 'value' => '');
        }
    }
    return $choices;
}

В этом коде мы заменяем варианты выбора поля select на список последних заказов пользователя. Важно указать правильные ID формы и поля.

Пошаговое решение задачи

  1. Убедитесь, что у вас установлены и активны WPForms и WooCommerce.
  2. Определите ID формы и поля в WPForms, куда хотите вывести список заказов (через админку или экспорт формы).
  3. Добавьте в functions.php вашей темы или в плагин следующий код (с корректировкой ID):
  4. Проверьте, что вы вошли как пользователь с заказами на сайте.
  5. Откройте страницу с формой и убедитесь, что в поле select отображаются заказы.

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

Чтобы проверить работу решения:

  • Авторизуйтесь на сайте под пользователем с созданными заказами WooCommerce.
  • Откройте страницу с формой WPForms, где вы применили фильтр.
  • Убедитесь, что поле select содержит список заказов с номерами и датами.
  • Если поле пустое или показывает сообщение о необходимости входа — проверьте корректность ID формы и поля, а также наличие заказов.

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

  • Неправильные ID формы или поля: Фильтр срабатывает только для конкретной формы и поля. Проверьте ID в админке WPForms или через экспорт JSON.
  • Пользователь неавторизован: Код подставляет список только для залогиненных. Добавьте обработку гостевых пользователей, если нужно.
  • Отсутствие заказов у пользователя: Проверьте, что у пользователя действительно есть заказы. Можно добавить заглушку для пустого списка.
  • Ошибки в PHP-коде: Проверьте логи ошибок сервера, включите WP_DEBUG для диагностики.

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

  • Не выводите в форме избыточную информацию о заказах (например, полные данные клиента), чтобы не раскрывать личные данные.
  • Кэшируйте результаты вызовов wc_get_orders, если форма часто загружается на сайте с высоким трафиком. Для этого можно использовать transient API WordPress.
  • Фильтр wpforms_field_select_choices вызывается на каждом рендере формы — избегайте тяжелых запросов к базе.
  • Всегда проверяйте права доступа пользователя перед выводом персональных данных.

Таблица сравнения методов вывода данных заказов в WPForms

МетодОписаниеПлюсыМинусы
Динамическое заполнение select через фильтрПодставляет список заказов в поле выбораПростой код, нативная поддержка WPFormsТолько для полей select, требует ID поля
Вывод HTML с заказами в поле HTMLГенерация кастомного HTML с деталями заказовГибкость отображения, можно оформить таблицуНет интерактивности, требует JS для динамики
AJAX-загрузка данных заказовЗагрузка заказов при открытии формы через AJAXНе нагружает страницу, актуальные данныеСложнее в реализации, требует JS и REST API
×
День SEO
Время сделать подарок своему WordPress!
-20% на премиум

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

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