Как создать автоматический расчет сложного тарифа в WordPress с примерами кода

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

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

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

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

Рассмотрим пример: тариф для услуги зависит от количества дней, количества участников и выбранного пакета сервиса. Цена меняется в зависимости от сочетания этих параметров.

Создание базы расчета — структура данных для тарифов

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

Пример структуры для нашего тарифа:

$wpcalc_calc_tariffs = [
    'basic' => [
        'price_per_day' => 1000,
        'max_participants' => 5,
        'discounts' => [
            ['min_days' => 5, 'discount_percent' => 10],
            ['min_days' => 10, 'discount_percent' => 20],
        ],
    ],
    'premium' => [
        'price_per_day' => 2000,
        'max_participants' => 10,
        'discounts' => [
            ['min_days' => 3, 'discount_percent' => 5],
            ['min_days' => 7, 'discount_percent' => 15],
        ],
    ],
];

Здесь для каждого пакета указана цена за день, максимальное количество участников и массив скидок по минимальному количеству дней.

Реализация функции расчета тарифа на PHP

Теперь создадим функцию wpcalc_calculate_tariff, которая примет параметры и вернет итоговую цену с учетом скидок и ограничений.

function wpcalc_calculate_tariff($package, $days, $participants) {
    global $wpcalc_calc_tariffs;

    if (!isset($wpcalc_calc_tariffs[$package])) {
        return 0; // Пакет не найден
    }

    $tariff = $wpcalc_calc_tariffs[$package];

    // Проверка ограничения по участникам
    if ($participants > $tariff['max_participants']) {
        return 0; // Превышено макс. число участников
    }

    $base_price = $tariff['price_per_day'] * $days;

    // Определяем максимальную скидку
    $max_discount = 0;
    foreach ($tariff['discounts'] as $discount) {
        if ($days >= $discount['min_days'] && $discount['discount_percent'] > $max_discount) {
            $max_discount = $discount['discount_percent'];
        }
    }

    $price_after_discount = $base_price * (1 - $max_discount / 100);

    // Допустим, цена увеличивается на 10% за каждого участника сверх 1
    if ($participants > 1) {
        $price_after_discount *= 1 + 0.1 * ($participants - 1);
    }

    return round($price_after_discount, 2);
}

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

Интеграция с формой на странице и AJAX обновление результата

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

Пример HTML формы:

<form id="wpcalc-form">
  <label>Пакет:
    <select name="package">
      <option value="basic">Базовый</option>
      <option value="premium">Премиум</option>
    </select>
  </label>
  <label>Дней:
    <input type="number" name="days" min="1" value="1" />
  </label>
  <label>Участников:
    <input type="number" name="participants" min="1" value="1" />
  </label>
  <div id="wpcalc-result">Стоимость: —</div>
</form>

JavaScript с использованием jQuery для отправки запроса и обновления результата:

jQuery(document).ready(function($) {
  $('#wpcalc-form input, #wpcalc-form select').on('change input', function() {
    var data = {
      action: 'wpcalc_ajax_calculate',
      package: $('#wpcalc-form select[name="package"]').val(),
      days: parseInt($('#wpcalc-form input[name="days"]').val()),
      participants: parseInt($('#wpcalc-form input[name="participants"]').val()),
    };

    $.post(wpcalc_ajax_object.ajax_url, data, function(response) {
      if (response.success) {
        $('#wpcalc-result').text('Стоимость: ' + response.data.price + ' ₽');
      } else {
        $('#wpcalc-result').text('Ошибка в расчете');
      }
    });
  });
});

На стороне PHP нужно зарегистрировать AJAX-обработчик:

add_action('wp_ajax_wpcalc_ajax_calculate', 'wpcalc_ajax_calculate_handler');
add_action('wp_ajax_nopriv_wpcalc_ajax_calculate', 'wpcalc_ajax_calculate_handler');

function wpcalc_ajax_calculate_handler() {
    $package = sanitize_text_field($_POST['package'] ?? '');
    $days = intval($_POST['days'] ?? 0);
    $participants = intval($_POST['participants'] ?? 0);

    $price = wpcalc_calculate_tariff($package, $days, $participants);

    if ($price > 0) {
        wp_send_json_success(['price' => $price]);
    } else {
        wp_send_json_error();
    }
}

Использование плагинов для расширения функционала расчета

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

  • Clearfy Pro — расширяет возможности WordPress, включая оптимизацию и дополнительные инструменты для работы с кодом и формулами.
  • Expert Review — плагин для создания сложных форм и калькуляторов с возможностью гибкой настройки правил.

Оба плагина позволяют создавать сложные условия и интегрироваться с визуальными формами, что значительно сокращает время разработки.

Подведение итогов и рекомендации по доработке

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

Для повышения удобства можно добавить:

  • Валидацию формы и пользовательские уведомления.
  • Кэширование результатов при повторных расчетах с одинаковыми параметрами.
  • Интеграцию с WooCommerce для автоматического добавления товара с рассчитанной ценой.
  • Административный интерфейс для управления тарифами без редактирования кода.

Такой подход обеспечит надежную и масштабируемую систему расчетов на вашем сайте с WordPress.

Как создать динамический калькулятор с выбором услуг на WordPress
11.03.2026
Автоматизация расчёта стоимости услуг в WordPress
28.11.2025
Как добавить расчет налогов в WordPress калькуляторе
05.02.2026
Как добавить калькулятор расчетов на страницу WordPress без плагинов
17.11.2025
Как создать визуальный калькулятор в WordPress с помощью jQuery UI Slider
15.12.2025