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

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

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

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

Преимущества AJAX-форм:

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

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

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

1. Подготовка HTML-формы

Создадим форму с полями для имени и email и кнопкой отправки. Добавим уникальный id для работы с JavaScript.

<form id="wpassist-ajax-form">
  <label for="name">Имя:</label>
  <input type="text" id="name" name="name" required />
  <br/>
  <label for="email">Email:</label>
  <input type="email" id="email" name="email" required />
  <br/>
  <input type="submit" value="Отправить" />
  <div id="wpassist-form-response" style="margin-top:10px;"></div>
</form>

2. Подключение JavaScript для обработки отправки

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

document.addEventListener('DOMContentLoaded', function() {
  const form = document.getElementById('wpassist-ajax-form');
  form.addEventListener('submit', function(e) {
    e.preventDefault();
    const formData = new FormData(form);
    const responseContainer = document.getElementById('wpassist-form-response');
    responseContainer.innerHTML = 'Отправка...';

    fetch(wpassist_ajax_object.ajax_url, {
      method: 'POST',
      credentials: 'same-origin',
      headers: {
        'X-Requested-With': 'XMLHttpRequest'
      },
      body: new URLSearchParams({
        action: 'wpassist_process_form',
        security: wpassist_ajax_object.nonce,
        name: formData.get('name'),
        email: formData.get('email')
      })
    })
    .then(response => response.json())
    .then(data => {
      if(data.success) {
        responseContainer.innerHTML = '<span style="color:green;">' + data.data.message + '</span>';
        form.reset();
      } else {
        responseContainer.innerHTML = '<span style="color:red;">' + data.data.message + '</span>';
      }
    })
    .catch(() => {
      responseContainer.innerHTML = '<span style="color:red;">Произошла ошибка при отправке формы.</span>';
    });
  });
});

3. Регистрируем скрипт и локализуем переменные в functions.php

Для передачи URL AJAX и nonce для безопасности используем wp_localize_script.

function wpassist_enqueue_scripts() {
  wp_enqueue_script('wpassist-ajax-script', get_template_directory_uri() . '/js/wpassist-ajax.js', array('jquery'), null, true);
  wp_localize_script('wpassist-ajax-script', 'wpassist_ajax_object', array(
    'ajax_url' => admin_url('admin-ajax.php'),
    'nonce' => wp_create_nonce('wpassist_ajax_nonce')
  ));
}
add_action('wp_enqueue_scripts', 'wpassist_enqueue_scripts');

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

Добавим функции-обработчики, которые будут принимать данные, проверять nonce и возвращать ответ в JSON.

function wpassist_ajax_process_form() {
  check_ajax_referer('wpassist_ajax_nonce', 'security');

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

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

  wp_mail($admin_email, $subject, $message);

  wp_send_json_success(array('message' => 'Спасибо за заявку, мы с вами свяжемся!'));
}
add_action('wp_ajax_wpassist_process_form', 'wpassist_ajax_process_form');
add_action('wp_ajax_nopriv_wpassist_process_form', 'wpassist_ajax_process_form');

Дополнительные рекомендации по безопасности и удобству

Использование nonce для защиты

Nonce — это уникальный токен, который предотвращает CSRF-атаки. В нашем примере мы используем check_ajax_referer для проверки nonce. Никогда не обрабатывайте AJAX-запросы без проверки nonce, чтобы избежать взлома через подделку запросов.

Валидация и санитизация данных

Обязательно валидируйте и очищайте входящие данные. Мы использовали функции sanitize_text_field и sanitize_email. Это предотвратит внедрение вредоносного кода и обеспечит корректность данных.

Обработка ошибок и уведомления пользователя

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

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

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

Пример вызова функции модерации перед отправкой письма:

if(function_exists('wpremark_check_message')) {
  $check = wpremark_check_message($name . ' ' . $email);
  if(!$check) {
    wp_send_json_error(array('message' => 'Ваше сообщение похоже на спам.')); 
  }
}

Подключить WPRemark можно через официальную страницу плагина.

Выводы

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

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

Как использовать custom capabilities для ограничения доступа в WordPress
23.04.2026
Как избежать конфликтов между WooCommerce и другими плагинами WordPress
20.04.2026
Как настроить автоматическое удаление старого контента в WordPress
02.04.2026
Как создать простой shortcode в WordPress с применением
04.11.2025
Как отключить AJAX загрузку товаров в WooCommerce
06.12.2025