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

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

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

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

  • Проверки уникальности логина или email при регистрации;
  • Динамической подгрузки контента;
  • Отправки обратной связи без перезагрузки;
  • Фильтрации товаров или постов по параметрам;
  • И многих других интерактивных функций.

Использование AJAX повышает скорость взаимодействия и улучшает UX.

Настройка AJAX в WordPress: базовые шаги

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

1. Добавление JavaScript для отправки AJAX-запроса

Сначала подключим скрипт и передадим в него параметры для AJAX:

function wpwp_enqueue_scripts() {
    wp_enqueue_script('wpwp-ajax-script', get_template_directory_uri() . '/js/wpwp-ajax.js', array('jquery'), null, true);
    wp_localize_script('wpwp-ajax-script', 'wpwp_ajax_obj', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce'    => wp_create_nonce('wpwp_ajax_nonce')
    ));
}
add_action('wp_enqueue_scripts', 'wpwp_enqueue_scripts');

В этом примере мы подключаем файл wpwp-ajax.js и передаём ему ajax_url и nonce — защитный токен.

2. Создание JavaScript для отправки данных

В файле wpwp-ajax.js напишем код, который отправляет данные формы на сервер:

jQuery(document).ready(function($) {
    $('#wpwp-form').on('submit', function(e) {
        e.preventDefault();
        var formData = $(this).serialize();

        $.ajax({
            url: wpwp_ajax_obj.ajax_url,
            type: 'POST',
            data: formData + '&action=wpwp_process_form&nonce=' + wpwp_ajax_obj.nonce,
            success: function(response) {
                $('#wpwp-response').html(response.data.message);
            },
            error: function() {
                $('#wpwp-response').html('Произошла ошибка при отправке формы.');
            }
        });
    });
});

Здесь мы перехватываем событие отправки формы, собираем данные и отправляем POST-запрос на admin-ajax.php с параметром action, который укажет WordPress, какую функцию вызвать.

Обработка AJAX в PHP: регистрация и реализация функции

Теперь добавим обработчик в файл functions.php темы или плагина.

function wpwp_process_form_callback() {
    check_ajax_referer('wpwp_ajax_nonce', 'nonce');

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

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

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

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

    wp_send_json_success(array('message' => 'Спасибо за отправку, ' . esc_html($name) . '!'));
}
add_action('wp_ajax_wpwp_process_form', 'wpwp_process_form_callback');
add_action('wp_ajax_nopriv_wpwp_process_form', 'wpwp_process_form_callback');

Объяснение:

  • Проверяем nonce для безопасности;
  • Собираем и фильтруем данные из $_POST;
  • Делаем валидацию полей;
  • Отправляем ответ в формате JSON с помощью wp_send_json_success или wp_send_json_error;
  • Регистрируем обработчик для авторизованных и неавторизованных пользователей.

Пример простой формы для отправки

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

<form id="wpwp-form" method="post">
    <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 />

    <button type="submit">Отправить</button>
</form>
<div id="wpwp-response"></div>

Эта форма будет отправлять данные с помощью AJAX, и результат появится в блоке wpwp-response без перезагрузки страницы.

Использование плагинов для расширения функционала форм

Если хочется не писать AJAX самостоятельно, можно использовать плагины с поддержкой AJAX:

  • Clearfy Pro — оптимизация и защита, включает удобные настройки для AJAX;
  • My Popup — создание всплывающих форм с AJAX;
  • Contact Form 7 с дополнением Ajax Submit для отправки форм без перезагрузки.

Но если нужна кастомизация — лучше писать собственный код, как показано выше.

Советы по безопасности и оптимизации AJAX форм

При работе с AJAX важно соблюдать несколько правил:

  • Всегда проверяйте nonce, чтобы защититься от CSRF;
  • Фильтруйте и валидируйте все входящие данные;
  • Обрабатывайте ошибки и информируйте пользователя;
  • Минимизируйте количество запросов, объединяя их, если возможно;
  • Кешируйте часто запрашиваемые данные, если это применимо.

Соблюдение этих рекомендаций поможет сделать формы быстрыми, удобными и безопасными.

Как удалить meta robots из WordPress на конкретных страницах
20.01.2026
Создание собственных REST API эндпоинтов в WordPress
03.12.2025
Как удалить пустые теги HTML в WordPress
29.01.2026
Как установить границы для вещественных пользователей при регистрации в WordPress
13.12.2025
Как создать собственный шорткод в WordPress
02.11.2025