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

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

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

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

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

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

Основы реализации AJAX в WordPress для форм с расчетами

WordPress предоставляет удобный механизм для AJAX-запросов через admin-ajax.php. Процесс сводится к нескольким шагам:

  1. Регистрация AJAX-хуков на сервере.
  2. Добавление JavaScript, который отправляет данные формы через AJAX.
  3. Обработка запроса на сервере и возврат результата.
  4. Обновление интерфейса на странице без перезагрузки.

Рассмотрим на примере простого калькулятора, который суммирует два числа, введённых пользователем.

Шаг 1. Регистрация AJAX обработчика в functions.php

add_action('wp_ajax_wpcalc_calculate_sum', 'wpcalc_calculate_sum');
add_action('wp_ajax_nopriv_wpcalc_calculate_sum', 'wpcalc_calculate_sum');

function wpcalc_calculate_sum() {
    $a = isset($_POST['a']) ? floatval($_POST['a']) : 0;
    $b = isset($_POST['b']) ? floatval($_POST['b']) : 0;
    $sum = $a + $b;
    wp_send_json_success(array('result' => $sum));
}

Здесь мы создаём функцию wpcalc_calculate_sum, которая принимает два числа, суммирует их и возвращает JSON-ответ с результатом.

Шаг 2. JavaScript для отправки AJAX-запроса

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

jQuery(document).ready(function($) {
    function wpcalc_send_request() {
        var a = parseFloat($('#wpcalc-input-a').val()) || 0;
        var b = parseFloat($('#wpcalc-input-b').val()) || 0;
        $.ajax({
            url: wpcalc_ajax_object.ajax_url,
            method: 'POST',
            dataType: 'json',
            data: {
                action: 'wpcalc_calculate_sum',
                a: a,
                b: b
            },
            success: function(response) {
                if(response.success) {
                    $('#wpcalc-result').text('Сумма: ' + response.data.result);
                }
            }
        });
    }

    $('#wpcalc-input-a, #wpcalc-input-b').on('input', wpcalc_send_request);
});

Не забудьте локализовать скрипт в functions.php для передачи ajax_url:

function wpcalc_enqueue_scripts() {
    wp_enqueue_script('wpcalc-script', get_template_directory_uri() . '/js/wpcalc.js', array('jquery'), null, true);
    wp_localize_script('wpcalc-script', 'wpcalc_ajax_object', array(
        'ajax_url' => admin_url('admin-ajax.php')
    ));
}
add_action('wp_enqueue_scripts', 'wpcalc_enqueue_scripts');

Создание HTML-формы с динамическими расчетами

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

function wpcalc_form_shortcode() {
    return '
        <div id="wpcalc-form">
            <label>Число A: <input type="number" id="wpcalc-input-a" value="0" /></label>
            <label>Число B: <input type="number" id="wpcalc-input-b" value="0" /></label>
            <div id="wpcalc-result">Сумма: 0</div>
        </div>
    ';
}
add_shortcode('wpcalc_form', 'wpcalc_form_shortcode');

Теперь при добавлении шорткода [wpcalc_form] на страницу появится форма с динамическим подсчётом суммы.

Расширение функционала: пример более сложного калькулятора

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

Обработка данных на сервере

function wpcalc_calculate_price() {
    $base_price = isset($_POST['base_price']) ? floatval($_POST['base_price']) : 0;
    $quantity = isset($_POST['quantity']) ? intval($_POST['quantity']) : 1;
    $discount = isset($_POST['discount']) ? floatval($_POST['discount']) : 0;
    $extra_option = isset($_POST['extra_option']) ? boolval($_POST['extra_option']) : false;

    $price = $base_price * $quantity;
    if ($extra_option) {
        $price += 20; // фиксированная доплата
    }
    if ($discount > 0) {
        $price -= ($price * $discount / 100);
    }

    wp_send_json_success(array('price' => round($price, 2)));
}
add_action('wp_ajax_wpcalc_calculate_price', 'wpcalc_calculate_price');
add_action('wp_ajax_nopriv_wpcalc_calculate_price', 'wpcalc_calculate_price');

JavaScript для отправки расширенных данных

jQuery(document).ready(function($) {
    function wpcalc_update_price() {
        var base_price = parseFloat($('#wpcalc-base-price').val()) || 0;
        var quantity = parseInt($('#wpcalc-quantity').val()) || 1;
        var discount = parseFloat($('#wpcalc-discount').val()) || 0;
        var extra_option = $('#wpcalc-extra-option').is(':checked');

        $.post(wpcalc_ajax_object.ajax_url, {
            action: 'wpcalc_calculate_price',
            base_price: base_price,
            quantity: quantity,
            discount: discount,
            extra_option: extra_option
        }, function(response) {
            if(response.success) {
                $('#wpcalc-price-result').text('Цена: ' + response.data.price + ' ₽');
            }
        });
    }

    $('#wpcalc-base-price, #wpcalc-quantity, #wpcalc-discount, #wpcalc-extra-option').on('input change', wpcalc_update_price);
});

HTML разметка формы

function wpcalc_price_form_shortcode() {
    return '
        <div id="wpcalc-price-form">
            <label>Базовая цена: <input type="number" id="wpcalc-base-price" value="100" step="0.01"/></label><br/>
            <label>Количество: <input type="number" id="wpcalc-quantity" value="1" min="1"/></label><br/>
            <label>Скидка (%): <input type="number" id="wpcalc-discount" value="0" min="0" max="100"/></label><br/>
            <label><input type="checkbox" id="wpcalc-extra-option" /> Дополнительная опция (+20 ₽)</label><br/>
            <div id="wpcalc-price-result">Цена: 100 ₽</div>
        </div>
    ';
}
add_shortcode('wpcalc_price_form', 'wpcalc_price_form_shortcode');

Рекомендации по оптимизации и безопасности AJAX-форм

При работе с AJAX важно учитывать следующие моменты:

  • Проверка и очистка данных. Всегда фильтруйте и валидируйте входящие данные, чтобы избежать XSS и SQL-инъекций.
  • Использование nonce. Для защиты от CSRF добавляйте nonce и проверяйте его в обработчике.
  • Минимизация нагрузки. Не перегружайте сервер сложными вычислениями на каждом запросе, кешируйте результаты при возможности.
  • Юзабилити. Добавьте визуальные индикаторы загрузки и обработку ошибок в JavaScript.

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

Если хочется использовать готовые решения с гибкой настройкой, обратите внимание на следующие плагины:

  • Quizle — удобный конструктор интерактивных форм и опросов с поддержкой калькуляторов.
  • Expert Review — плагин для создания обзоров и рейтингов с возможностью добавлять динамические расчёты.
  • WPRemark — расширенный комментарий с AJAX и возможностью кастомных вычислений.

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

Выводы

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

Автоматизация расчётов в WordPress с помощью CRON и PHP
26.01.2026
Как создать весовой калькулятор в WordPress с помощью AJAX и PHP
28.12.2025
Как отправлять данные калькулятора в заказ WooCommerce: практическое руководство
26.04.2026
Как создать калькулятор сложных расчетов с учетом зависимостей в WordPress
08.02.2026
Как создать адаптивный калькулятор в WordPress с помощью Vue.js и AJAX
21.12.2025