Каким плагином можно реализовать выбор даты в форме?

Ссылка скопирована
1 ответ

Нужна форма обратной связи с полем с выбором даты в календаре
НО
нужна возможность исключения определенных дней
пробовал Date Picker For Contact Form 7
там можно исключить только дни на месяц, то есть пн,вт и т.д - они будут исключены для всех недель
а нужна возможность исключать любые дни любой недели

Дополнительно:

Каким плагином можно реализовать выбор даты в форме?

В этом плагине такая функция есть в платной версии.

Каким плагином можно реализовать выбор даты в форме?

Вот альтернатива. Добавьте сниппет (или в файл functions.php) следующий код

// Подключение jQuery и jQuery UI Datepicker через ссылку function load_jquery_and_jquery_ui_datepicker() {     wp_enqueue_script('jquery');     wp_enqueue_script('jquery-ui-datepicker', 'https://code.jquery.com/ui/1.12.1/jquery-ui.min.js', array('jquery'), '1.12.1', true); } add_action('wp_enqueue_scripts', 'load_jquery_and_jquery_ui_datepicker');  // Подключение стилей для jQuery UI Datepicker function load_jquery_ui_datepicker_styles() {     wp_enqueue_style('jquery-ui-datepicker', 'https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css'); } add_action('wp_enqueue_scripts', 'load_jquery_ui_datepicker_styles');

// Подключение jQuery и jQuery UI Datepicker через ссылку function load_jquery_and_jquery_ui_datepicker() { wp_enqueue_script('jquery'); wp_enqueue_script('jquery-ui-datepicker', 'https://code.jquery.com/ui/1.12.1/jquery-ui.min.js', array('jquery'), '1.12.1', true); } add_action('wp_enqueue_scripts', 'load_jquery_and_jquery_ui_datepicker'); // Подключение стилей для jQuery UI Datepicker function load_jquery_ui_datepicker_styles() { wp_enqueue_style('jquery-ui-datepicker', 'https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css'); } add_action('wp_enqueue_scripts', 'load_jquery_ui_datepicker_styles');

В самой форме добавьте поле для даты
[date* your-date class:your-date-field-class]

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

<script type="text/javascript"> jQuery(document).ready(function($) { 	$(".your-date-field-class").removeAttr("type");     // Указываем исключаемые даты в формате "yy-mm-dd"     var excludedDates = ["2023-08-15", "2023-08-22"];     var isDatepickerInitialized = false;      // Функция для проверки, является ли дата исключаемой     function isExcludedDate(date) {         var formattedDate = $.datepicker.formatDate("yy-mm-dd", date);         return (excludedDates.indexOf(formattedDate) !== -1);     }      // Инициализация datepicker для поля с выбором даты     function initializeDatepicker() {         $(".your-date-field-class").datepicker({             dateFormat: "yy-mm-dd",             beforeShowDay: function(date) {                 return [!isExcludedDate(date)];             }         });          isDatepickerInitialized = true;     }      // Обработчик клика на строке с классом 'your-date-field-class'     $(document).on('focus', '.your-date-field-class', function() {         if (!isDatepickerInitialized) {             initializeDatepicker();         }     }); });  </script>

<script type="text/javascript"> jQuery(document).ready(function($) { $(".your-date-field-class").removeAttr("type"); // Указываем исключаемые даты в формате "yy-mm-dd" var excludedDates = ["2023-08-15", "2023-08-22"]; var isDatepickerInitialized = false; // Функция для проверки, является ли дата исключаемой function isExcludedDate(date) { var formattedDate = $.datepicker.formatDate("yy-mm-dd", date); return (excludedDates.indexOf(formattedDate) !== -1); } // Инициализация datepicker для поля с выбором даты function initializeDatepicker() { $(".your-date-field-class").datepicker({ dateFormat: "yy-mm-dd", beforeShowDay: function(date) { return [!isExcludedDate(date)]; } }); isDatepickerInitialized = true; } // Обработчик клика на строке с классом 'your-date-field-class' $(document).on('focus', '.your-date-field-class', function() { if (!isDatepickerInitialized) { initializeDatepicker(); } }); }); </script>

your-date-field-class - можете заменить на более удобный свой.
Так же пришлось убрать из формы type="date" этой частью $(".your-date-field-class").removeAttr("type"); То календарь дважды всплывал, наш правильный и от браузера без исключенных дат.

  • PolarOne, ты это в ответ написал, а не в коммент.
Нужно решить такую задачу?

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

Заказать помощь
Лучший ответ
1
Мария Код Ответ

Для формы с выбором даты и исключением произвольных дат нужен datepicker, который поддерживает beforeShowDay. В Contact Form 7 это можно сделать без тяжёлого плагина: подключить jQuery UI Datepicker или flatpickr и передать массив запрещённых дат.

Пример на jQuery UI:

jQuery(function ($) {
  const disabledDates = [
    '2026-05-20',
    '2026-05-27',
    '2026-06-03'
  ];
 
  $('.js-date-field').datepicker({
    dateFormat: 'yy-mm-dd',
    beforeShowDay: function (date) {
      const y = date.getFullYear();
      const m = String(date.getMonth() + 1).padStart(2, '0');
      const d = String(date.getDate()).padStart(2, '0');
      const formatted = y + '-' + m + '-' + d;
 
      return [!disabledDates.includes(formatted)];
    }
  });
});

jQuery(function ($) { const disabledDates = [ '2026-05-20', '2026-05-27', '2026-06-03' ]; $('.js-date-field').datepicker({ dateFormat: 'yy-mm-dd', beforeShowDay: function (date) { const y = date.getFullYear(); const m = String(date.getMonth() + 1).padStart(2, '0'); const d = String(date.getDate()).padStart(2, '0'); const formatted = y + '-' + m + '-' + d; return [!disabledDates.includes(formatted)]; } }); });

В CF7 полю даты задайте класс:

[text* booking-date class:js-date-field placeholder "Выберите дату"]

[text* booking-date class:js-date-field placeholder "Выберите дату"]

Если исключённые даты должны меняться из админки, храните их в опции, ACF options page или отдельном CPT, а в JS передавайте через wp_localize_script(). Для коммерческой формы лучше дополнительно проверять дату на сервере при отправке, потому что пользователь может обойти JS и отправить запрещённую дату вручную.

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

Для бронирования или записи на услугу обязательно продумайте часовой пояс и формат даты. Лучше хранить дату в одном техническом формате Y-m-d, а пользователю показывать привычный русский формат только в интерфейсе. Так вы избежите ситуации, когда дата 05.06.2026 в одном месте читается как 5 июня, а в другом как 6 мая.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно