Даты, которые вы возвращаете из своего WP-Query, выглядят как «20200829», но в вашем коде datepicker вы пытаетесь сравнить их с датами формата 'yy-mm-dd'
, т.е. они выглядят как «2020-08-29» ". Это разные форматы, поэтому они никогда не будут совпадать.
Вы можете:
- Изменить формат даты в вашем сравнении datepicker, чтобы он соответствовал датам
WP_Query
, используя формат yymmdd
вот так:
var date_to_check = jQuery.datepicker.formatDate('yymmdd', date);
Переформатируйте даты из
WP_Query
... обычно я бы не предлагал этого делать, но для даты обычно используются разделители дат, и если вам нужно использовать эти даты в другом месте вашего кода, вы можете просто отформатируйте их в соответствии с требованиями с самого начала.
В этом случае вы можете переформатировать их в PHP следующим образом:
foreach ($dates as $d){
$date = DateTime::createFromFormat('Ymd', $d);
$formatted_dates[] = $date->format('Y-m-d');
}
И вы используете его в своем средстве выбора даты, например вы уже были, например:
<?php echo "var dates_to_disable = ". json_encode($formatted_dates) . ";\n"; ?>
jQuery(document).ready(function($) {
$("#datepicker").datepicker({
beforeShowDay: function(date){
var date_to_check = jQuery.datepicker.formatDate('yy-mm-dd', date);
return [ dates_to_disable.indexOf(date_to_check) == -1 ];
}
});
});
Основная причина, по которой я включил этот вариант в свой ответ, - это подчеркнуть, что PHP и jQuery datepicker имеют разные способы форматирования даты strings .
Так, например, в приведенном выше коде, чтобы даты выглядели как «2020-08-29»: