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

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

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

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

Преимущества AJAX в WordPress:

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

Создаем простую динамическую форму с AJAX в WordPress

1. Регистрация скрипта и локализация данных

Первым делом подключим JavaScript файл с AJAX-логикой и передадим в него URL для AJAX-запросов. Для этого добавим следующий код в файл functions.php вашей темы или в плагин:

function wpskill_enqueue_scripts() {
    wp_enqueue_script('wpskill-ajax-script', get_template_directory_uri() . '/js/wpskill-ajax.js', array('jquery'), '1.0', true);
    wp_localize_script('wpskill-ajax-script', 'wpskill_ajax', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce'    => wp_create_nonce('wpskill_ajax_nonce')
    ));
}
add_action('wp_enqueue_scripts', 'wpskill_enqueue_scripts');

Здесь мы подключаем скрипт wpskill-ajax.js и передаем ему URL для AJAX и nonce — защитный токен для безопасности.

2. Создаем HTML форму

Добавьте на страницу или в шаблон следующий HTML код формы:

<form id="wpskill-ajax-form">
    <label for="name">Имя:</label>
    <input type="text" id="name" name="name" required />

    <label for="email">Email:</label>
    <input type="email" id="email" name="email" required />

    <input type="submit" value="Отправить" />
</form>

<div id="wpskill-form-response"></div>

Это простая форма с полями имени и email и местом для вывода ответа от сервера.

3. Пишем JavaScript для отправки формы

В файле js/wpskill-ajax.js добавьте следующий код:

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

        var name = $('#name').val();
        var email = $('#email').val();

        $.ajax({
            url: wpskill_ajax.ajax_url,
            type: 'POST',
            data: {
                action: 'wpskill_handle_form',
                nonce: wpskill_ajax.nonce,
                name: name,
                email: email
            },
            success: function(response) {
                $('#wpskill-form-response').html(response.data);
            },
            error: function() {
                $('#wpskill-form-response').html('Произошла ошибка при отправке формы.');
            }
        });
    });
});

Этот код перехватывает отправку формы, собирает данные и отправляет их на сервер через AJAX-запрос с указанием действия wpskill_handle_form.

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

Добавим обработчик в functions.php:

function wpskill_handle_form_callback() {
    check_ajax_referer('wpskill_ajax_nonce', 'nonce');

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

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

    // Здесь можно добавить логику: сохранить в базу, отправить email и т.д.
    // Для примера просто возвращаем сообщение:
    $message = 'Спасибо, ' . esc_html($name) . ', ваша форма успешно отправлена!';

    wp_send_json_success($message);
}
add_action('wp_ajax_wpskill_handle_form', 'wpskill_handle_form_callback');
add_action('wp_ajax_nopriv_wpskill_handle_form', 'wpskill_handle_form_callback');

Функция проверяет nonce для безопасности, валидирует данные, и отправляет JSON-ответ с сообщением об успехе или ошибке.

Безопасность и валидация данных в AJAX-формах WordPress

Очень важно не забывать про безопасность при работе с AJAX. В первую очередь используйте wp_create_nonce и check_ajax_referer для защиты от CSRF-атак.

Данные, получаемые из $_POST, обязательно нужно очищать и валидировать. Для текстовых полей подойдет sanitize_text_field, для email — sanitize_email и is_email.

Кроме того, если вы планируете сохранять данные в базу или отправлять письма, убедитесь, что используете подготовленные запросы и функции WordPress для отправки email (wp_mail), чтобы избежать уязвимостей.

Примеры расширения функционала динамической формы

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

Для примера можно добавить в форму поле выбора:

<label for="service">Выберите услугу:</label>
<select id="service" name="service" required>
    <option value="">--Выберите--</option>
    <option value="consulting">Консультация</option>
    <option value="development">Разработка</option>
</select>

В JS добавьте сбор этого поля:

var service = $('#service').val();

И в AJAX-запрос добавьте service: service. В PHP обработчике получите и проверьте это поле:

$service = sanitize_text_field($_POST['service']);
$valid_services = array('consulting', 'development');
if (!in_array($service, $valid_services)) {
    wp_send_json_error('Выбрана некорректная услуга.');
}

Использование плагина Clearfy Pro для ускорения AJAX-форм

Плагин Clearfy Pro помогает оптимизировать работу сайта, в том числе улучшает производительность AJAX-запросов и безопасность. Рекомендуется использовать его для комплексной доработки сайта с AJAX-формами, особенно если у вас много запросов и высокая нагрузка.

Отладка и тестирование AJAX-формы в WordPress

Если AJAX-форма не работает, проверьте:

  • Правильно ли подключен JS-файл и локализованы переменные;
  • Отсутствуют ли ошибки в консоли браузера (F12 → Console);
  • Правильно ли обрабатывается nonce на сервере;
  • Возвращает ли сервер корректный JSON-ответ;
  • Работают ли хуки wp_ajax_ и wp_ajax_nopriv_;
  • Проверяйте ответы с помощью инструментов разработчика Network;
  • Убедитесь, что нет конфликтов с другими плагинами или темой.

Для удобства добавьте в обработчик PHP логирование ошибок через error_log или используйте плагины для отладки.

Как использовать фильтр pre_get_posts для правильной работы пагинации на страницах архива в WordPress
18.05.2026
Как отключить XML-RPC в WordPress для повышения безопасности
03.02.2026
Как добавить автоматические уведомления о обновлениях плагинов в WordPress
22.02.2026
Как создать автозаполняемый формат даты в WordPress
11.12.2025
Создать Custom Post Type в WordPress: пошаговое руководство
25.11.2025