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

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

Почему стоит использовать AJAX для отправки формы в WordPress

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

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

Рассмотрим детально, как создать такую форму и обработчик.

Подготовка формы с AJAX в WordPress

Начнем с простой HTML-формы, которую нужно добавить в шаблон или через шорткод:

<form id="wptem-ajax-form" method="post">
  <input type="text" name="username" placeholder="Введите имя" required>
  <input type="email" name="email" placeholder="Введите email" required>
  <button type="submit">Отправить</button>
</form>
<div id="wptem-response"></div>

Эта форма содержит два поля и кнопку отправки. Ниже формы предусмотрено место для вывода ответа сервера.

Подключение JavaScript для обработки AJAX

В functions.php вашей темы или в плагине зарегистрируйте и подключите скрипт с локализацией для передачи admin-ajax.php и nonce:

function wptem_enqueue_ajax_script() {
    wp_enqueue_script('wptem-ajax-script', get_template_directory_uri() . '/js/wptem-ajax.js', array('jquery'), null, true);
    wp_localize_script('wptem-ajax-script', 'wptem_ajax_object', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'nonce' => wp_create_nonce('wptem_ajax_nonce')
    ));
}
add_action('wp_enqueue_scripts', 'wptem_enqueue_ajax_script');

Здесь мы подключаем файл wptem-ajax.js и передаем в него необходимые параметры для AJAX.

JavaScript код для отправки формы

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

jQuery(document).ready(function($) {
  $('#wptem-ajax-form').on('submit', function(e) {
    e.preventDefault();
    var data = {
      action: 'wptem_handle_form',
      nonce: wptem_ajax_object.nonce,
      username: $('input[name="username"]').val(),
      email: $('input[name="email"]').val()
    };

    $.post(wptem_ajax_object.ajax_url, data, function(response) {
      $('#wptem-response').html(response.data.message);
    });
  });
});

Объяснение кода:

  • Отменяем стандартную отправку формы.
  • Собираем данные из полей.
  • Отправляем POST-запрос на admin-ajax.php с параметром action.
  • Выводим ответ сервера в блок #wptem-response.

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

Теперь создадим PHP-функцию для обработки данных формы. Добавьте в functions.php или плагин следующий код:

function wptem_handle_form() {
    check_ajax_referer('wptem_ajax_nonce', 'nonce');

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

    if (empty($username) || 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($username) . '! Ваша форма успешно отправлена.'));
}
add_action('wp_ajax_wptem_handle_form', 'wptem_handle_form');
add_action('wp_ajax_nopriv_wptem_handle_form', 'wptem_handle_form');

Пояснения:

  • Проверяем nonce для безопасности.
  • Санитизируем и проверяем поля.
  • Отправляем ответ в формате JSON с сообщением об ошибке или успехе.
  • Регистрируем обработчик для авторизованных и неавторизованных пользователей.

Примеры полезных дополнений и плагинов

Clearfy Pro для улучшения AJAX-работы

Плагин Clearfy Pro поможет оптимизировать AJAX-запросы, отключить лишние скрипты и ускорить отклик сервера.

Использование WPGPT для динамических форм

Если вы хотите создавать более сложные формы с динамически подгружаемым контентом, можно интегрировать WPGPT, который позволяет генерировать ответы и данные через GPT прямо на сайте.

Отладка и советы по безопасности

При работе с AJAX в WordPress важно:

  • Всегда проверять nonce, чтобы защитить сайт от CSRF-атак.
  • Санитизировать входящие данные, чтобы избежать XSS и SQL-инъекций.
  • Использовать wp_send_json_success и wp_send_json_error для стандартизированного ответа.
  • Тестировать скрипты в разных браузерах и на мобильных устройствах.

Если AJAX-запрос не работает, проверьте консоль браузера и логи сервера. Часто ошибки связаны с неверным адресом admin-ajax.php или отсутствием параметра action.

WooCommerce: автоматическое удаление неактивных корзин и заказов
11.05.2026
Как создать персонализированные типы записей в WordPress: практические примеры и код
25.11.2025
WooCommerce: автоматическое удаление товаров без заказов через заданный период
26.04.2026
Автоматическая отмена неоплаченных заказов в WooCommerce
14.06.2026
Как отключить Emoji в WordPress: эффективные методы
23.01.2026