Нет отключенных дат в datepicker с использованием массива дат php - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь взять даты из поля даты в настраиваемом типе сообщения в wordpress, а затем перенести даты в массив. Затем этот массив преобразуется в объект js. Этот объект js используется в datepicker с beforeShowDay, но он не работает. Я получаю указатель даты, но даты недоступны.

Если я это сделаю:

print_r($dates);

в части php, я получу: Array ([0] => 20200829 [1] = > 20200821)

Вот мой код:

    $dates = [];
    $args = array('post_type' => 'cus_booking');
    $loop = new WP_Query( $args ); 
    
    while ( $loop->have_posts() ) : $loop->the_post(); 
        the_excerpt(); 
        the_field('start_date');
        array_push($dates,get_field('start_date'));
    endwhile;
    
    ?>
    <input type="text" id="datepicker">

    <script>
        <?php
            $js_array = json_encode($dates);
            echo "var javascript_array = ". $js_array . ";\n";
        ?>
        jQuery(document).ready(function($) {
            $("#datepicker").datepicker({

                beforeShowDay: function(date){
                    var string = jQuery.datepicker.formatDate('yy-mm-dd', date);
                    return [ javascript_array.indexOf(string) == -1 ]
                }
        }
        );
        });
</script>

<?php
    wp_reset_postdata(); 
?>

1 Ответ

0 голосов
/ 03 августа 2020

Даты, которые вы возвращаете из своего WP-Query, выглядят как «20200829», но в вашем коде datepicker вы пытаетесь сравнить их с датами формата 'yy-mm-dd', т.е. они выглядят как «2020-08-29» ". Это разные форматы, поэтому они никогда не будут совпадать.

Вы можете:

  1. Изменить формат даты в вашем сравнении 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»:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...