Как создать динамические формы с помощью WPForms в WordPress

Динамические формы — это мощный инструмент для сбора данных, который адаптируется под ответы пользователя, показывая или скрывая поля в зависимости от выбора. В WordPress одним из самых популярных плагинов для создания форм является WPForms. В этой статье подробно разберём, как создавать подобные динамические формы с помощью WPForms, а также рассмотрим примеры кода и полезные советы для разработчиков.

Что такое динамические формы и зачем они нужны в WordPress

Динамические формы позволяют улучшить взаимодействие с пользователем, делая формы более компактными и логичными. Вместо того чтобы показывать все поля сразу, мы можем показывать только те, которые релевантны ответам пользователя. Это снижает количество ошибок при заполнении, повышает конверсию и улучшает UX.

Например, если пользователь выбирает определённый тип услуги, можно автоматически показывать дополнительные поля, которые относятся только к этому типу, скрывая остальные.

Настройка WPForms для создания динамической логики

WPForms поддерживает условную логику, которая позволяет показывать или скрывать поля в зависимости от значений других полей. Вот как это сделать:

  1. Установите и активируйте плагин WPForms.
  2. Создайте новую форму и добавьте необходимые поля (например, выпадающий список, текстовые поля и т.д.).
  3. Для поля, которое должно отображаться динамически, включите условную логику. В редакторе формы найдите вкладку «Условная логика» и настройте правило, например: показывать поле, если «Тип услуги» равен «Консультация».

Таким образом, вы можете строить сложные формы с разветвлённой логикой, не прибегая к дополнительному коду.

Пример динамической формы с WPForms и пользовательским кодом

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

Допустим, у нас есть кастомный тип записей «Проекты», и мы хотим, чтобы выпадающий список в форме показывал их список. Добавим следующий код в functions.php вашей темы или в плагин:

function wp7ru_wpforms_dynamic_project_options( $field, $form_data ) {
    if ( $field['id'] == '5' && $field['type'] == 'select' ) { // замените 5 на ID вашего поля
        $args = array(
            'post_type' => 'project',
            'posts_per_page' => -1,
            'post_status' => 'publish'
        );
        $projects = get_posts( $args );
        $choices = array();
        foreach ( $projects as $project ) {
            $choices[] = array(
                'label' => $project->post_title,
                'value' => $project->ID
            );
        }
        $field['choices'] = $choices;
    }
    return $field;
}
add_filter( 'wpforms_fields_show', 'wp7ru_wpforms_dynamic_project_options', 10, 2 );

Этот код динамически заменит опции поля select с ID 5 на заголовки всех опубликованных записей типа «project». Таким образом, список всегда актуален без ручного обновления формы.

Улучшение UX динамических форм с помощью AJAX

Для более плавной работы форм и отсутствия перезагрузки страницы удобно использовать AJAX. WPForms из коробки поддерживает AJAX-подачу, но можно расширить функционал, чтобы динамически менять поля без обновления формы.

Например, можно добавить скрипт, который при выборе значения в одном поле будет отправлять AJAX-запрос и подгружать данные в другое поле. Ниже пример простого jQuery кода, который слушает изменение поля с ID #wpforms-123-field_1 и обновляет поле #wpforms-123-field_2:

jQuery(document).ready(function($) {
    $('#wpforms-123-field_1').on('change', function() {
        var selected = $(this).val();
        $.ajax({
            url: wp7ru_ajax_object.ajax_url,
            type: 'POST',
            data: {
                action: 'wp7ru_load_dynamic_options',
                selected_value: selected
            },
            success: function(response) {
                var options = '';
                $.each(response.data, function(key, value) {
                    options += '<option value="' + key + '">' + value + '</option>';
                });
                $('#wpforms-123-field_2').html(options);
            }
        });
    });
});

И серверный обработчик в functions.php:

function wp7ru_load_dynamic_options_callback() {
    $selected = sanitize_text_field( $_POST['selected_value'] );
    // Пример логики: в зависимости от выбранного значения возвращаем разные опции
    $options = array();
    if ( $selected == 'option1' ) {
        $options = array('sub1' => 'Подопция 1', 'sub2' => 'Подопция 2');
    } elseif ( $selected == 'option2' ) {
        $options = array('sub3' => 'Подопция 3', 'sub4' => 'Подопция 4');
    }
    wp_send_json_success( $options );
}
add_action( 'wp_ajax_wp7ru_load_dynamic_options', 'wp7ru_load_dynamic_options_callback' );
add_action( 'wp_ajax_nopriv_wp7ru_load_dynamic_options', 'wp7ru_load_dynamic_options_callback' );
<

Для работы не забудьте локализовать скрипт, чтобы передать ajax_url:

function wp7ru_enqueue_scripts() {
    wp_enqueue_script( 'wp7ru-dynamic-forms', get_template_directory_uri() . '/js/dynamic-forms.js', array('jquery'), null, true );
    wp_localize_script( 'wp7ru-dynamic-forms', 'wp7ru_ajax_object', array(
        'ajax_url' => admin_url( 'admin-ajax.php' )
    ) );
}
add_action( 'wp_enqueue_scripts', 'wp7ru_enqueue_scripts' );

Советы по оптимизации и безопасности динамических форм

При работе с динамическими формами важно учитывать несколько моментов:

  • Валидация данных: Все данные, отправляемые с форм, должны валидироваться и санитизироваться как на клиенте, так и на сервере.
  • Ограничение доступа: Если данные загружаются через AJAX, учитывайте права пользователя, чтобы не раскрывать конфиденциальную информацию.
  • Минимизация запросов: Избегайте лишних AJAX-запросов, кэшируйте данные, если это возможно.
  • Оптимизация UX: Используйте индикаторы загрузки и понятные сообщения об ошибках.

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

Заключение

Создание динамических форм в WordPress с помощью WPForms — отличный способ повысить удобство и эффективность сбора данных. Используя встроенную условную логику и добавляя кастомные решения с помощью PHP и AJAX, можно построить формы любой сложности. Если вы хотите попробовать WPForms, скачайте плагин с официального сайта WPSHOP.

Как использовать WP7 AJAX для реального времени обновления данных в WordPress
27.01.2026
Как создать собственный шорткод в WordPress
31.10.2025
Как создать многоязычный сайт на WordPress без плагинов
18.12.2025
Как сделать динамические заголовки H1 в WordPress для улучшения SEO
24.01.2026
Как создать плагин для автоматизации задач в WordPress
30.11.2025