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

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

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

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

Для реализации AJAX в WordPress важно корректно подключить скрипты и использовать admin-ajax.php для обработки запросов.

Создаем простую форму обратной связи

Начнем с создания HTML-формы в любом шаблоне или через шорткод. Например, добавим такой код в functions.php для создания шорткода [wp_shablon_ajax_form]:

function wp_shablon_ajax_form_shortcode() {
  ob_start();
  ?>
  <form id="wp-shablon-contact-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 />

    <label for="message">Сообщение:</label>
    <textarea id="message" name="message" required></textarea>

    <button type="submit">Отправить</button>
    <div id="wp-shablon-form-response"></div>
  </form>
  <?php
  return ob_get_clean();
}
add_shortcode('wp_shablon_ajax_form', 'wp_shablon_ajax_form_shortcode');

Теперь на любой странице можно вставить [wp_shablon_ajax_form] и будет выведена форма.

Подключаем скрипт AJAX в WordPress

Чтобы отправлять форму без перезагрузки, подключим JS-скрипт, который будет обрабатывать отправку и работать с AJAX.

function wp_shablon_enqueue_scripts() {
  wp_enqueue_script('wp-shablon-ajax-form', get_template_directory_uri() . '/js/wp-shablon-ajax-form.js', ['jquery'], null, true);
  wp_localize_script('wp-shablon-ajax-form', 'wpShablonAjax', [
    'ajaxurl' => admin_url('admin-ajax.php'),
    'nonce' => wp_create_nonce('wp_shablon_ajax_nonce')
  ]);
}
add_action('wp_enqueue_scripts', 'wp_shablon_enqueue_scripts');

Файл wp-shablon-ajax-form.js нужно создать в папке темы /js/ и написать в нем следующий код:

jQuery(document).ready(function($) {
  $('#wp-shablon-contact-form').on('submit', function(e) {
    e.preventDefault();
    var form = $(this);
    var responseDiv = $('#wp-shablon-form-response');
    responseDiv.html('Отправка...');
    $.ajax({
      url: wpShablonAjax.ajaxurl,
      type: 'POST',
      data: {
        action: 'wp_shablon_send_contact_form',
        nonce: wpShablonAjax.nonce,
        name: form.find('#name').val(),
        email: form.find('#email').val(),
        message: form.find('#message').val()
      },
      success: function(data) {
        if(data.success) {
          responseDiv.html('<span style="color:green;">' + data.data + '</span>');
          form[0].reset();
        } else {
          responseDiv.html('<span style="color:red;">' + data.data + '</span>');
        }
      },
      error: function() {
        responseDiv.html('<span style="color:red;">Ошибка запроса. Попробуйте позже.</span>');
      }
    });
  });
});

Обрабатываем AJAX-запрос на сервере

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

function wp_shablon_handle_contact_form() {
  check_ajax_referer('wp_shablon_ajax_nonce', 'nonce');

  $name = isset($_POST['name']) ? sanitize_text_field($_POST['name']) : '';
  $email = isset($_POST['email']) ? sanitize_email($_POST['email']) : '';
  $message = isset($_POST['message']) ? sanitize_textarea_field($_POST['message']) : '';

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

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

  $to = get_option('admin_email');
  $subject = 'Новое сообщение с сайта';
  $headers = ['Content-Type: text/html; charset=UTF-8', 'From: ' . $name . ' <' . $email . '>'];
  $body = '<p><strong>Имя:</strong> ' . esc_html($name) . '</p>'
        . '<p><strong>Email:</strong> ' . esc_html($email) . '</p>'
        . '<p><strong>Сообщение:</strong><br>' . nl2br(esc_html($message)) . '</p>';

  $mail_sent = wp_mail($to, $subject, $body, $headers);

  if($mail_sent) {
    wp_send_json_success('Спасибо за ваше сообщение! Мы свяжемся с вами в ближайшее время.');
  } else {
    wp_send_json_error('Ошибка при отправке письма. Попробуйте позже.');
  }

  wp_die();
}
add_action('wp_ajax_wp_shablon_send_contact_form', 'wp_shablon_handle_contact_form');
add_action('wp_ajax_nopriv_wp_shablon_send_contact_form', 'wp_shablon_handle_contact_form');

Защита от спама и улучшения

Чтобы защитить форму от спама, можно добавить Google reCAPTCHA или использовать плагин Clearfy Pro, который интегрируется с формами и блокирует спам-ботов.

Другой вариант — добавить скрытое поле (honeypot), которое видят только боты, и если оно заполнено — отклонять запрос.

Также полезно логировать ошибки и успешные отправки, чтобы анализировать работу формы. Для этого можно использовать плагин Expert Review или собственные записи в базе.

Обзор полезных плагинов для форм и AJAX в WordPress

Если не хочется писать форму с нуля, рассмотрите эти плагины:

  • Contact Form 7 — классика, поддерживает AJAX из коробки, множество расширений и интеграций.
  • Ninja Forms — удобный визуальный конструктор форм с поддержкой AJAX.
  • WPForms — платный плагин с отличной поддержкой AJAX, антиспамом и аналитикой.
  • My Popup от WPGPT на WPSHOP — если хотите добавить форму обратной связи в попап с AJAX.

Итоговые рекомендации и советы

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

Подключайте JS через wp_enqueue_script, используйте обработку через admin-ajax.php и возвращайте ответы в формате JSON для удобного парсинга на фронтенде.

Если вы используете шаблоны Reboot или Root, то код можно интегрировать напрямую в шаблонные части. Для расширения возможностей и интеграции с CRM и аналитикой рассмотрите плагины от WPSHOP.

WooCommerce: как быстро использовать хуки для добавления контента в страницы товара
06.05.2026
Как создать свой плагин WordPress: пошаговое руководство
10.11.2025
Как автоматически редактировать изображения при загрузке в WordPress
16.03.2026
WooCommerce: как быстро использовать хуки для добавления контента в страницы товара
13.05.2026
Как создать собственный шорткод в WordPress
01.11.2025