前提
ワードプレスを使ってイベントページを作成しており、
そのsingleページにContactForm7のフォームを挿入しています。
フォームの中にデイトピッカーを設けており、最小日・最大日を設定したいと考えています。
各記事ごとに選択できる日付の範囲を変えたいので、
カスタムフィールドで最小・最大の日付を選択し、これを反映できるようにしたいです。
js内にあるデイトピッカーの中で、PHPで取得した日付を出力することが希望です。
発生している問題・エラーメッセージ
■single.php
PHP
1//デイトピッカーに日付選択範囲を追加する 2<?php 3 $jsonString = json_encode($dataArray, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT); 4 $date_start = [date_format(date_create(get_field('イベント開始日')), 'Y,m,d')]; 5 $date_end = [date_format(date_create(get_field('イベント終了日')), 'Y,m,d')]; 6 if($date_end){ 7 $ads_s = json_encode($date_start); 8 $ads_e = json_encode($date_end); 9 }else{ 10 $ads_s = json_encode($date_start); 11 $ads_e = json_encode($date_start); 12 } 13 ?>
■script.js
js
1$(function () { 2 let $ads_s = JSON.parse('<?php echo $ads_s; ?>'); 3 let $ads_e = JSON.parse('<?php echo $ads_e; ?>'); 4 console.log($ads_s); 5 console.log($ads_e); 6 7 $("#custom-datepicker").datepicker({ 8 language: 'ja', 9 dateFormat: 'yy年mm月dd日(D)', 10 minDate: new Date(JSON.parse("<?php echo $ads_s[0]; ?>")), 11 maxDate: new Date(JSON.parse("<?php echo $ads_e[0]; ?>")) 12 }); 13});
single.php内では、「echo $ads_s」 で、["2022, 08, 01"]のような形で配列が出力できていることを確認しています。
しかし、jsファイルにJSONを用いたphpの配列が出力されません。
console.logで確認したところ、下記のようなエラーが出ております。
Uncaught SyntaxError: Unexpected token '<', "<?php echo"... is not valid JSON
検証モードでjsを確認したところ、
理想は下記のようになっていてほしいのですが、
js
1let $ads_s = ["2022, 08, 01"];
このようになってしまいます。
js
1 let $ads_s = JSON.parse('<?php echo $ads_s; ?>');
どのようにすれば、エラーが解消できるかお力添えいただきたいです。
最終的に下記のコードで解決しました!
忘備録として記載します。
▼footer.php
php
1<?php 2 //カスタムフィールドで開始日と終了日を取得 3 $jsonString = json_encode($dataArray, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT); 4 $date_start = date_format(date_create(get_field('イベント開始日')), 'Y/m/d'); 5 $date_end = date_format(date_create(get_field('イベント終了日')), 'Y/m/d'); 6 if(get_field('イベント終了日')){ 7 $ads_s = json_encode($date_start); 8 $ads_e = json_encode($date_end); 9 }else{ 10 $ads_s = json_encode($date_start); 11 $ads_e = json_encode($date_start); 12 } 13 14 // スマートカスタムフィールドで除外日をデイトピッカーを使って記載したものを、新しい配列に格納する 15 $get_group = SCF::get('deleteDayArray'); 16 $get_delete_day = []; 17 $i = 0; 18 foreach ($get_group as $fields) { 19 $event_time = esc_html($fields['deleteDay']); 20 $get_delete_day[$i] = date_format(date_create($event_time), 'Y/m/d'); 21 $i++; 22 } 23 24 $today = date("Y/m/d"); 25 //除外日の入力がないとき、今日の日付が自動的に入力されていたため本日の日付で分岐 26 if($get_delete_day[0] !== $today){ 27 $get_delete_day_array = json_encode($get_delete_day); 28 }else{ 29 //昨日以前の日付は選択に含めないため、除外日の入力がないときは昨日の日付を入れる 30 $get_delete_day_array[0] = date("Y/m/d",strtotime("yesterday")); 31 $get_delete_day_array = json_encode($get_delete_day); 32 } 33?> 34<?php if (is_singular("event")): ?> 35 <script> 36 $(function (){ 37 var disableDates = JSON.parse('<?php echo $get_delete_day_array; ?>'); 38 // ContactForm7のデイトピッカーにカスタムフィールドで設定した最大・最小日を設ける 39 $("#custom-datepicker").datepicker({ 40 language: 'ja', 41 dateFormat: 'yy年mm月dd日(D)', 42 beforeShowDay : function(date) { 43 var disableDate = $.datepicker.formatDate('yy/mm/dd', date); 44 if (disableDates.indexOf(disableDate) !== -1) { 45 return [false, '']; 46 }else{ 47 return [true, '']; 48 } 49 }, 50 minDate: new Date(JSON.parse('<?php echo $ads_s; ?>')), 51 maxDate: new Date(JSON.parse('<?php echo $ads_e; ?>')), 52 }); 53 }); 54 </script> 55<?php endif; ?> 56

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/17 14:21
2022/08/18 02:19
2022/08/18 11:34
2022/08/22 00:55