#前提・実現したいこと
お世話になります。
WordPressに自作のイベントカレンダーを設置させて、そのカレンダーに祝日の表示をさせたいと思い、
GoogleカレンダーAPIを取り入れ、祝日の取得はできているようなのですが、カレンダーに反映することができませんでした。
エラーの表示が出ておらず、どこがいけないのかが分からない状態です。
どなたかご教授いただけますでしょうか。
どうぞよろしくお願いいたします。
#参考にしたサイト
https://yahss.net/wordpress/1316-event-calendar/
https://www.asobou.co.jp/blog/web/googlecalender2
##祝日を取得するためのコード
php
1function get_holidays ($ym, $t) { 2 3 $holidays = get_transient( 'holidays'.$ym ); 4 if ( !$holidays ) { 5 $api_key = '取得したAPIキーを入力しています'; 6 $calendar_id = urlencode('japanese__ja@holiday.calendar.google.com'); 7 // データの開始日 8 $start = date('2020-01-01\T00:00:00\Z'); 9 // データの終了日 10 $end = date('2022-12-31\T00:00:00\Z'); 11 $url = "https://www.googleapis.com/calendar/v3/calendars/" . $calendar_id . "/events?"; 12 $query = [ 13 'key' => $api_key, 14 'timeMin' => $start, 15 'timeMax' => $end, 16 'maxResults' => 50, 17 'orderBy' => 'startTime', 18 'singleEvents' => 'true' 19 ]; 20 $holidays = []; 21 if ($data = file_get_contents($url. http_build_query($query), true)) { 22 $data = json_decode($data); 23 //年月日をキー、祝日名を配列に格納 24 foreach ($data->items as $item ) { 25 $date = strtotime((string) $item->start->date); 26 $title = (string) $item->summary; 27 $holidays[date('Y-m-d', $date)] = $title; 28 } 29 } 30 set_transient( 'holidays'.$ym, $holidays, 3600 * 24 ); 31 } 32return $holidays; 33}
##カレンダーの表示
php
1function shortcode_my_calendar($params = array()) { 2 3 // ショートコードのパラメータを取得 4extract(shortcode_atts(array( 5 'ym' => null 6), $params)); 7 8 // 現在の年月日を取得 9 $current_y = date_i18n('Y'); 10 $current_m = date_i18n('m'); 11 $current_d = date_i18n('d'); 12 $params = array(); 13 // ショートコードで年月が指定していなければ、現在の年月を設定 14 15 $calendar_ym = ( $params['ym'] ) ? $params['ym'] : $current_y . '-' . $current_m; 16 17 // 該当月のイベントを取得し配列に格納 18 $args = array( 19 'post_status' => 'publish', 20 'posts_per_page' => -1, // 全件取得 21 'meta_query' => array( 22array( 23 'key' => 'event_date', 24 'value' => $calendar_ym, 25 'compare' => 'LIKE' 26) 27 ) 28 ); 29 $event_posts = get_posts( $args ); 30 $events = array(); 31 if ( $event_posts ) { 32 foreach ( $event_posts as $post ) { 33$event_date = esc_html( get_post_meta( $post -> ID, 'event_date', true ) ); 34$event_link = get_permalink( $post -> ID ); 35$events[$event_date][] = "<a href='{$event_link}'>●</a>"; 36 } 37 } 38 39 // 表示年月の日数を取得 40 $calendar_t = date_i18n('t', strtotime($calendar_ym.'-01')); 41 42 // 祝日の取得 43 $holidays = get_holidays ($calendar_ym, $calendar_t); 44 45 // カレンダー表示 ?> 46<h3><?php echo $calendar_ym ?></h3> 47<table class="calendar"> 48 <tr> 49 <th class="w0">日</th> 50 <th class="w1">月</th> 51 <th class="w2">火</th> 52 <th class="w3">水</th> 53 <th class="w4">木</th> 54 <th class="w5">金</th> 55 <th class="w6">土</th> 56 </tr> 57 <tr> 58 <?php 59 $dayArr = array('日', '月', '火', '水', '木', '金', '土'); 60 $index = 0; 61 for ( $i = 1; $i <= $calendar_t; $i++ ): 62 $calendar_day = date_i18n('w', strtotime($calendar_ym . '-' . $i)); 63 $calendar_date = ( $i < 10 ) ? '0' . $i : $i; 64 65 // 1日が日曜日ではない場合の空白セル 66 if ( $i == 1 && $calendar_day != 0 ): 67for ( $index = 0; $index < $calendar_day; $index++ ): 68?> 69 <td class="<?php echo 'w' . $index ?>"> </td> 70 <?php 71endfor; 72 endif; 73 74 // 祝日かどうか 75 $hol = ( in_array( $calendar_ym . '-' . $calendar_date, $holidays ) ) ? ' hol' : ''; 76 77 // 日付表示 ?> 78 <td class="<?php echo 'w' . $calendar_day .$hol ?>"><span class="date"><?php echo $i ?></span> 79 <? 80// 該当日付のイベントがあればリンクを表示 81if ( isset($events[$calendar_ym . '-' . $calendar_date]) && count( $events[$calendar_ym . '-' . $calendar_date] ) > 0 ) { 82 foreach ( $events[$calendar_ym . '-' . $calendar_date] as $event ) { 83 echo $event; 84 } 85} ?> 86 </td> 87 <?php 88 89 // 土曜日なら行末 90 if ( $calendar_day == 6 ): ?> 91 </tr> 92 <tr> 93 <?php 94 endif; 95 96 $index++; 97 98 // 最終日の後の空白 99 if ( $i == $calendar_t && $index < 42 ): 100for ( $index; $index < 42; $index++ ): 101 if ( $calendar_day == 6 ) { 102 $calendar_day = 0; ?> 103 </tr> 104 <tr> 105 <?php 106 } elseif ( $calendar_day < 6 ) { 107 $calendar_day++; 108 } ?> 109 <td class="<?php echo 'w' . $calendar_day ?>"> </td> 110 <?php 111endfor; 112 endif; 113 endfor; 114 ?> 115 </tr> 116</table> 117<?php 118} 119add_shortcode('my-calendar', 'shortcode_my_calendar'); 120
#確認したこと・試した事
var_dump($holidays);
にて、祝日が表示されることは確認しました。
set_transient(
1
の箇所あたりが間違っているのかと思うのですが、どなたかご教授いただけますでしょうか。
どうぞよろしくお願いいたします。
あなたの回答
tips
プレビュー