Отправка формы в WordPress без перезагрузки страницы с помощью AJAX

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

Почему отправка формы через AJAX важна в WordPress

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

  • Отправлять данные асинхронно без перезагрузки;
  • Показывать пользователю статус отправки в режиме реального времени;
  • Валидация данных на стороне клиента и сервера без лишних переходов;
  • Обрабатывать ответы и обновлять часть страницы динамически.

Все это улучшает UX и снижает нагрузку на сервер.

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

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

Создание HTML формы

Пример простой формы, которую будем отправлять:

<form id="wptavern-contact-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 />

    <input type="submit" value="Отправить" />
</form>
<div id="wptavern-form-response" style="margin-top:10px;"></div>

Добавление JavaScript

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

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

        var formData = {
            'action': 'wptavern_process_form',
            'name': $('#name').val(),
            'email': $('#email').val(),
            'security': wptavern_ajax_obj.nonce
        };

        $('#wptavern-form-response').html('Отправка...');

        $.post(wptavern_ajax_obj.ajax_url, formData, function(response) {
            if(response.success) {
                $('#wptavern-form-response').html('<span style="color:green;">' + response.data + '</span>');
                $('#wptavern-contact-form')[0].reset();
            } else {
                $('#wptavern-form-response').html('<span style="color:red;">' + response.data + '</span>');
            }
        });
    });
});

Этот скрипт использует jQuery для удобства, но можно сделать и на чистом JS.

Подключение скрипта и локализация

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

function wptavern_enqueue_scripts() {
    wp_enqueue_script('wptavern-ajax-script', get_template_directory_uri() . '/js/wptavern-ajax.js', array('jquery'), null, true);
    wp_localize_script('wptavern-ajax-script', 'wptavern_ajax_obj', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('wptavern_nonce')
    ));
}
add_action('wp_enqueue_scripts', 'wptavern_enqueue_scripts');

Обработка AJAX-запроса в WordPress

Теперь реализуем функцию, которая будет принимать данные и возвращать ответ. Также добавим проверку безопасности через nonce.

function wptavern_process_form_callback() {
    check_ajax_referer('wptavern_nonce', 'security');

    $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.');
    }

    // Здесь можно добавить логику обработки: сохранять в базу, отправлять email и т.д.
    // Например, отправим простое письмо администратору
    $to = get_option('admin_email');
    $subject = 'Новое сообщение с формы на сайте';
    $message = "Имя: $name\nEmail: $email";
    wp_mail($to, $subject, $message);

    wp_send_json_success('Спасибо за ваше сообщение! Мы свяжемся с вами в ближайшее время.');
}
add_action('wp_ajax_wptavern_process_form', 'wptavern_process_form_callback');
add_action('wp_ajax_nopriv_wptavern_process_form', 'wptavern_process_form_callback');

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

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

  • Contact Form 7 – с дополнительным плагином Contact Form 7 Dynamic Text Extension и настройками AJAX;
  • WPForms – популярный конструктор форм с поддержкой AJAX;
  • Formidable Forms – мощный плагин с возможностью AJAX-отправки;
  • My Popup от WpShop – если нужна форма в всплывающем окне с AJAX.
    Подробнее: My Popup

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

При реализации AJAX-форм важно учитывать безопасность и производительность:

  • Используйте wp_create_nonce() и check_ajax_referer() для защиты от CSRF-атак;
  • Валидация данных должна быть как на клиенте, так и на сервере – никогда не доверяйте только JS;
  • Избегайте избыточных запросов и блокирующих операций в обработчике AJAX, чтобы не замедлять сайт;
  • Если форма собирает конфиденциальные данные, обязательно используйте HTTPS;
  • Для сложных форм можно использовать куки или сессии для сохранения промежуточных данных;
  • Логируйте ошибки и успешные отправки для мониторинга и отладки.

Как расширить функционал AJAX-формы в WordPress

После базовой реализации можно добавить дополнительные возможности:

  • Добавить CAPTCHA (например, Google reCAPTCHA) для защиты от спама;
  • Реализовать многошаговую форму с сохранением данных на каждом шаге через AJAX;
  • Встроить уведомления в админку или отправку сообщений в Telegram/Slack;
  • Добавить возможность загружать файлы через AJAX;
  • Использовать пользовательские типы записей для сохранения данных форм в базе.

Для примера, подключение reCAPTCHA можно выполнить, добавив поле в форму и проверяя ключ на сервере в функции обработчике.

Подытоживая, отправка формы без перезагрузки страницы в WordPress с помощью AJAX – это важный навык, который улучшит UX и расширит возможности вашего сайта. Приведённый пример можно адаптировать под любые задачи и дополнить нужным функционалом.

Как добавить поддержку WebP в WordPress без плагинов
10.04.2026
Как использовать WPRemark для управления отзывами в WordPress
05.02.2026
Как отображать пользовательские метаданные в WordPress REST API
25.01.2026
Как отладить проблемы с кэшированием в WordPress
07.11.2025
Как разрешить и запретить регистрацию по доменным именам в WordPress
23.03.2026