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

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

Почему автопроверка форм важна для WordPress

Проверка форм — это часто первая линия защиты от некорректных или вредоносных данных. Если проверка выполняется только после отправки формы и перезагрузки страницы, пользователь тратит время и может разочароваться. Автопроверка позволяет:

  • Сократить количество ошибок при заполнении.
  • Улучшить взаимодействие с пользователем.
  • Снизить нагрузку на сервер, предотвращая повторные отправки.

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

Основы AJAX в WordPress

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

  • wp_ajax_{action} — для авторизованных пользователей
  • wp_ajax_nopriv_{action} — для неавторизованных пользователей

Где {action} — уникальный идентификатор нашего AJAX-запроса.

Чтобы подключить AJAX, нужно:

  1. Добавить JavaScript-код для отправки запроса.
  2. Создать PHP-функцию-обработчик, которая принимает и валидирует данные.
  3. Зарегистрировать обработчик в WordPress.

Пример: автопроверка email на уникальность

JS-часть: отправка AJAX-запроса

Добавим скрипт, который будет отслеживать ввод в поле email и отправлять запрос на сервер:

jQuery(document).ready(function($) {
  $('#email').on('blur', function() {
    var email = $(this).val();
    if(email.length > 0) {
      $.ajax({
        url: wptests_ajax.ajax_url,
        type: 'POST',
        data: {
          action: 'wptests_check_email',
          email: email,
          security: wptests_ajax.nonce
        },
        success: function(response) {
          if(response.success) {
            $('#email-feedback').text('Email свободен').css('color', 'green');
          } else {
            $('#email-feedback').text(response.data).css('color', 'red');
          }
        },
        error: function() {
          $('#email-feedback').text('Ошибка проверки').css('color', 'red');
        }
      });
    }
  });
});

Здесь мы отслеживаем событие blur (потеря фокуса), берём значение и отправляем AJAX-запрос с параметрами.

Регистрация скрипта и локализация

Подключим скрипт и передадим ему адрес AJAX и nonce для безопасности в functions.php темы или плагина:

function wptests_enqueue_scripts() {
  wp_enqueue_script('wptests-ajax', get_template_directory_uri() . '/js/wptests-ajax.js', array('jquery'), '1.0', true);
  wp_localize_script('wptests-ajax', 'wptests_ajax', array(
    'ajax_url' => admin_url('admin-ajax.php'),
    'nonce'    => wp_create_nonce('wptests_nonce')
  ));
}
add_action('wp_enqueue_scripts', 'wptests_enqueue_scripts');

PHP-обработчик AJAX-запроса

Создаём функцию, которая проверит email в базе пользователей, и зарегистрируем её для AJAX:

function wptests_ajax_check_email() {
  check_ajax_referer('wptests_nonce', 'security');

  if(empty($_POST['email']) || !is_email($_POST['email'])) {
    wp_send_json_error('Некорректный email');
  }

  $email = sanitize_email($_POST['email']);

  if(email_exists($email)) {
    wp_send_json_error('Этот email уже зарегистрирован');
  } else {
    wp_send_json_success();
  }
}
add_action('wp_ajax_wptests_check_email', 'wptests_ajax_check_email');
add_action('wp_ajax_nopriv_wptests_check_email', 'wptests_ajax_check_email');

Функция проверяет nonce для безопасности, валидирует email и отвечает JSON-объектом с результатом проверки.

Как расширить автопроверку: другие поля и сценарии

Автопроверка может быть использована не только для email, но и для:

  • Проверки уникальности логина.
  • Валидации пароля (например, длина, сложность).
  • Проверки правильности формата телефона или других данных.

Для каждой проверки создайте отдельный action и обработчик, либо объедините логику в одном с передачей параметров.

Пример проверки логина

function wptests_ajax_check_login() {
  check_ajax_referer('wptests_nonce', 'security');

  if(empty($_POST['login']) || !validate_username($_POST['login'])) {
    wp_send_json_error('Некорректный логин');
  }

  $login = sanitize_user($_POST['login']);

  if(username_exists($login)) {
    wp_send_json_error('Логин уже занят');
  } else {
    wp_send_json_success();
  }
}
add_action('wp_ajax_wptests_check_login', 'wptests_ajax_check_login');
add_action('wp_ajax_nopriv_wptests_check_login', 'wptests_ajax_check_login');

Плагины для удобства и расширения возможностей автопроверки

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

  • Clearfy Pro — включает расширенные инструменты безопасности и валидации.
  • My Popup — поддерживает AJAX-формы с проверкой данных на лету.

Эти плагины можно использовать как основу и расширять под свои нужды.

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

При реализации автопроверки важно:

  • Использовать check_ajax_referer для защиты от CSRF.
  • Валидировать и очищать все входящие данные.
  • Не раскрывать слишком много информации во время проверки (например, точное наличие логина или email может быть уязвимостью).
  • Оптимизировать запросы к базе, чтобы не создавать излишнюю нагрузку.

Выводы

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

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

Как использовать хуки для автоматизации в WordPress
13.12.2025
Как изменить порядок вывода публикаций в WordPress по датам и пользовательским критериям
10.03.2026
Как использовать WPCommunity для создания социальной сети на WordPress
29.01.2026
Как автоматизировать проверку и обновление установленных плагинов в WordPress
12.01.2026
WooCommerce: автоматическое изменение стоимости товара при сменах вариаций
14.06.2026