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

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

Что такое AJAX и зачем он нужен в формах WordPress

AJAX (Asynchronous JavaScript and XML) позволяет обмениваться данными с сервером и обновлять части веб-страницы без её полной перезагрузки. В контексте форм на WordPress это означает, что пользователь может отправить данные и сразу увидеть результат — подтверждение, ошибку или изменённый контент — без обновления страницы.

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

Преимущества динамических форм с AJAX

  • Мгновенная обратная связь для пользователя.
  • Снижение количества перезагрузок страниц.
  • Возможность валидации данных на стороне сервера без блокировки интерфейса.
  • Гибкость в отображении ответов и ошибок.

Создание простой динамической формы на WordPress с AJAX

Для примера создадим форму обратной связи, которая будет отправлять имя и email пользователя, а затем выводить сообщение об успехе или ошибке.

Шаг 1. Создаем HTML форму и добавляем шорткод

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

function wpbono_dynamic_form_shortcode() {
    ob_start();
    ?>
    <form id="wpbono-dynamic-form">
        <p>
            <label for="name">Имя:</label><br>
            <input type="text" id="name" name="name" required>
        </p>
        <p>
            <label for="email">Email:</label><br>
            <input type="email" id="email" name="email" required>
        </p>
        <p>
            <input type="submit" value="Отправить">
        </p>
        <div id="wpbono-form-response"></div>
    </form>
    <?php
    return ob_get_clean();
}
add_shortcode('wpbono_dynamic_form', 'wpbono_dynamic_form_shortcode');

Теперь в любом месте сайта можно вставить форму через шорткод [wpbono_dynamic_form].

Шаг 2. Подключаем JavaScript для AJAX-запроса

Добавьте следующий код для подключения скрипта и локализации переменных AJAX:

function wpbono_enqueue_scripts() {
    wp_enqueue_script('wpbono-ajax-form', get_template_directory_uri() . '/js/wpbono-ajax-form.js', array('jquery'), null, true);
    wp_localize_script('wpbono-ajax-form', 'wpbono_ajax_obj', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce'    => wp_create_nonce('wpbono_ajax_nonce')
    ));
}
add_action('wp_enqueue_scripts', 'wpbono_enqueue_scripts');

Создайте файл wpbono-ajax-form.js в папке js вашей темы и вставьте туда:

jQuery(document).ready(function($){
    $('#wpbono-dynamic-form').on('submit', function(e){
        e.preventDefault();

        var data = {
            action: 'wpbono_handle_form',
            nonce: wpbono_ajax_obj.nonce,
            name: $('#name').val(),
            email: $('#email').val()
        };

        $.post(wpbono_ajax_obj.ajax_url, data, function(response) {
            $('#wpbono-form-response').html(response.data);
            if(response.success) {
                $('#wpbono-dynamic-form')[0].reset();
            }
        });
    });
});

Шаг 3. Обработка AJAX-запроса на сервере

Добавьте в functions.php следующий обработчик:

function wpbono_handle_form() {
    check_ajax_referer('wpbono_ajax_nonce', 'nonce');

    $name = isset($_POST['name']) ? sanitize_text_field($_POST['name']) : '';
    $email = isset($_POST['email']) ? sanitize_email($_POST['email']) : '';

    if(empty($name) || empty($email)) {
        wp_send_json_error('Пожалуйста, заполните все поля.');
    }

    if(!is_email($email)) {
        wp_send_json_error('Введите корректный email.');
    }

    // Здесь можно добавить логику сохранения или отправки данных

    wp_send_json_success('Спасибо, ' . esc_html($name) . '! Ваша заявка принята.');
}
add_action('wp_ajax_wpbono_handle_form', 'wpbono_handle_form');
add_action('wp_ajax_nopriv_wpbono_handle_form', 'wpbono_handle_form');

Расширение функционала: валидация и интеграция с плагинами

Клиентская валидация с помощью плагина Clearfy Pro

Для улучшения качества форм рекомендуем использовать плагин Clearfy Pro, который добавляет расширенную валидацию и защиту от спама. Его легко интегрировать с кастомными формами, дополняя защиту nonce и CAPTCHA.

Добавление поля выбора с динамическими данными

Для примера можно добавить выпадающий список с категориями:

function wpbono_dynamic_form_shortcode() {
    $categories = get_categories(array('hide_empty' => false));
    ob_start();
    ?>
    <form id="wpbono-dynamic-form">
        <p>
            <label for="name">Имя:</label><br>
            <input type="text" id="name" name="name" required>
        </p>
        <p>
            <label for="email">Email:</label><br>
            <input type="email" id="email" name="email" required>
        </p>
        <p>
            <label for="category">Категория:</label><br>
            <select id="category" name="category">
                <?php foreach($categories as $cat): ?>
                    <option value="<?php echo esc_attr($cat->term_id); ?>"><?php echo esc_html($cat->name); ?></option>
                <?php endforeach; ?>
            </select>
        </p>
        <p>
            <input type="submit" value="Отправить">
        </p>
        <div id="wpbono-form-response"></div>
    </form>
    <?php
    return ob_get_clean();
}

Не забудьте добавить обработку поля category в AJAX-хендлере.

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

Обработка ошибок и UX

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

Безопасность

Используйте wp_create_nonce и check_ajax_referer, чтобы защитить форму от CSRF атак. Все входящие данные обязательно фильтруйте и очищайте, чтобы избежать XSS и SQL-инъекций.

Производительность

Избегайте избыточных запросов к базе данных в AJAX-обработчиках. Кэшируйте результаты, если это возможно, и минимизируйте размер возвращаемого ответа.

Заключение

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

Рекомендуем использовать данный подход для обратной связи, регистрации, фильтров и других интерактивных элементов для вашего сайта на WordPress.

WooCommerce: как принудительно потребовать авторизацию пользователя при оформлении заказа
20.05.2026
Как добавить динамические параметры в URL WordPress для фильтрации контента
15.02.2026
Как использовать хуки WordPress для удаления стилей и скриптов: практические решения и примеры
06.12.2025
Как автоматизировать создание резервных копий в WordPress с помощью Clearfy Pro
18.01.2026
Как использовать хук pre_get_posts для гибкой фильтрации запросов в WordPress
13.12.2025