Как создать калькулятор с расчётом по дате в WordPress

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

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

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

Основные задачи такого калькулятора:

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

Для реализации нам понадобится использовать HTML-форму, JavaScript с AJAX и PHP в WordPress.

Создание формы выбора дат и вывода результата

Начнём с простого HTML с двумя полями для выбора даты и кнопкой для запуска расчёта. Добавим поле для вывода результата.

<form id="wpcalc-date-form">
  <label for="start_date">Дата начала:</label>
  <input type="date" id="start_date" name="start_date" required>

  <label for="end_date">Дата окончания:</label>
  <input type="date" id="end_date" name="end_date" required>

  <button type="submit">Рассчитать</button>
</form>

<div id="wpcalc-result"></div>

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

JavaScript и AJAX: отправка данных и получение результата без перезагрузки

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

document.getElementById('wpcalc-date-form').addEventListener('submit', function(e) {
  e.preventDefault();
  const startDate = document.getElementById('start_date').value;
  const endDate = document.getElementById('end_date').value;

  if (new Date(startDate) > new Date(endDate)) {
    alert('Дата начала не может быть позже даты окончания.');
    return;
  }

  const data = new FormData();
  data.append('action', 'wpcalc_date_calc');
  data.append('start_date', startDate);
  data.append('end_date', endDate);

  fetch(wpcalc_ajax_object.ajax_url, {
    method: 'POST',
    credentials: 'same-origin',
    body: data
  })
  .then(response => response.json())
  .then(result => {
    if(result.success) {
      document.getElementById('wpcalc-result').innerHTML = '<strong>Результат:</strong> ' + result.data.message;
    } else {
      document.getElementById('wpcalc-result').innerHTML = '<strong>Ошибка:</strong> ' + result.data;
    }
  })
  .catch(error => {
    document.getElementById('wpcalc-result').innerHTML = '<strong>Ошибка сети</strong>';
  });
});

Обратите внимание, что в примере используется переменная wpcalc_ajax_object.ajax_url. Чтобы она была доступна, нужно зарегистрировать скрипт и локализовать его в WordPress, что рассмотрим далее.

PHP: обработчик AJAX и вычисление разницы в датах

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

add_action('wp_ajax_wpcalc_date_calc', 'wpcalc_date_calc_handler');
add_action('wp_ajax_nopriv_wpcalc_date_calc', 'wpcalc_date_calc_handler');

function wpcalc_date_calc_handler() {
  // Проверяем и получаем даты из POST
  $start_date = isset($_POST['start_date']) ? sanitize_text_field($_POST['start_date']) : '';
  $end_date = isset($_POST['end_date']) ? sanitize_text_field($_POST['end_date']) : '';

  if (!$start_date || !$end_date) {
    wp_send_json_error('Обе даты обязательны для расчёта.');
  }

  $start = DateTime::createFromFormat('Y-m-d', $start_date);
  $end = DateTime::createFromFormat('Y-m-d', $end_date);

  if (!$start || !$end) {
    wp_send_json_error('Неверный формат даты. Используйте ГГГГ-ММ-ДД.');
  }

  if ($start > $end) {
    wp_send_json_error('Дата начала не может быть позже даты окончания.');
  }

  $interval = $start->diff($end);
  $days = $interval->days + 1; // Включая оба дня

  // Пример расчёта: стоимость 100 рублей в день
  $price_per_day = 100;
  $total_price = $days * $price_per_day;

  $message = sprintf('Период с %s по %s составляет %d дней. Итоговая стоимость: %d руб.', $start_date, $end_date, $days, $total_price);

  wp_send_json_success(['message' => $message]);
}

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

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

Чтобы подключить JavaScript и передать ajax_url, используйте следующий код в functions.php или в вашем плагине:

function wpcalc_enqueue_scripts() {
  wp_enqueue_script('wpcalc-date-calc', get_template_directory_uri() . '/js/wpcalc-date-calc.js', ['jquery'], '1.0', true);
  wp_localize_script('wpcalc-date-calc', 'wpcalc_ajax_object', [
    'ajax_url' => admin_url('admin-ajax.php'),
  ]);
}
add_action('wp_enqueue_scripts', 'wpcalc_enqueue_scripts');

Замените путь к скрипту на актуальный в вашем проекте.

Расширение функционала: разные тарифы и условия

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

function wpcalc_calculate_price_with_weekends($start, $end) {
  $price_per_day = 100;
  $price_weekend = 150; // 1.5 * 100
  $period = new DatePeriod($start, new DateInterval('P1D'), $end->modify('+1 day'));
  $total = 0;

  foreach ($period as $date) {
    $day_of_week = $date->format('N'); // 6 - суббота, 7 - воскресенье
    if ($day_of_week >= 6) {
      $total += $price_weekend;
    } else {
      $total += $price_per_day;
    }
  }
  return $total;
}

// В обработчике заменяем расчет цены:
$total_price = wpcalc_calculate_price_with_weekends($start, $end);

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

Пример использования плагина WPRemark для создания калькулятора с датами

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

Плагин поддерживает динамические формулы и AJAX, что упрощает задачи, описанные выше. Также он имеет визуальный конструктор форм.

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

Калькулятор с расчётом по дате — востребованный инструмент для многих сайтов на WordPress. Создание собственного решения с AJAX и PHP даёт максимальную гибкость и контроль.

Резюме по созданию:

  • Создайте HTML-форму с полями даты.
  • Реализуйте AJAX-отправку данных и динамическое обновление результата.
  • Обработайте данные на сервере, вычислите разницу и примените тарифы.
  • Подключите скрипты и локализуйте ajax_url.
  • Расширяйте логику вычислений по необходимости.

Также рассмотрите использование плагинов, например, WPRemark, для ускорения разработки.

WooCommerce: авторизация пользователя по номеру телефона с SMS-подтверждением
23.04.2026
Как создать динамические формы в WordPress с помощью Ajax и PHP
21.11.2025
Как добавить расчет налогов в WordPress калькуляторе
05.02.2026
Настройка и отладка счетчика посещаемости WordPress с примерами
28.02.2026
Как отправлять данные калькулятора в заказ WooCommerce: практическое руководство
26.04.2026