前提・実現したいこと
wordpressのカスタムフィールドを使って日・祝日・休業日の色付きカレンダーを作成したい
発生している問題・エラーメッセージ
投稿画面で休業日の指定をした時に該当する公開ページテンプレートに休業日の表示は出来るが、背景に色をつけることが出来ません
該当のソースコード
PHP
1/* -------------------------------------------------- 2 予約状況(reservation)個別ページ 3-------------------------------------------------- */ 4<?php get_header(); ?> 5 6 <div id="content" class="reservation-content"> 7 8 <main id="main" role="main"> 9 <section class="reservation-single"> 10 11<?php if ( have_posts() ): ?> 12 <header class="page-header"> 13 <h1 class="page-title">予約状況<a href="<?php echo home_url();?>/reservation/"><small>一覧へ</small></a></h1> 14 </header> 15 16<?php 17// 表示日数設定 18$num = 20; 19if($_POST['num']) { $num = $_POST['num']; } 20$nums = array('14','20','30','40'); 21// 現在の日付を設定 22$year = date('Y'); 23$month = date('n'); 24$day = date('j'); 25$date = mktime(0,0,0,$month,$day,$year); 26$today = $date; 27// ページ送りの日付を設定 28if( $_POST['date'] ) { $date = $_POST['date']; } 29if( $_POST['action']=='prev' ) { $date = $date-($num*60*60*24); } 30if( $_POST['action']=='next' ) { $date = $date+($num*60*60*24); } 31$year = date("Y", $date); 32$month = date("n", $date); 33$day = date("j", $date); 34?> 35 36 <div class="reservationSingle"> 37 38<?php /* main loop start */ while ( have_posts() ): the_post(); ?> 39 <div class="profile"> 40 <?php echo wp_get_attachment_image(post_custom('photo'), array(200,250)); ?> 41 <h2 class="name"><?php the_title(); ?> <small><?php echo get_post_meta($post->ID, 'kana', true); ?></small></h2> 42 <p class="course"><strong>担当科目</strong> : <?php echo get_post_meta($post->ID, 'course', true); ?></p> 43 <div class="introduction"><?php echo nl2br(get_the_content()); ?></div> 44 </div> 45<?php 46echo output_single_calendar(date('Y'),date('n')); 47echo output_single_calendar(date('Y'),date('n')+1); 48?> 49<?php /* main loop end */ endwhile; ?> 50 </div> 51 52<?php else: ?> 53 54 <article> 55 <header class="page-header"> 56 <h1 class="page-title">Not found.</h1> 57 </header> 58 <div class="page-content notfound"> 59 <p>お探しのページが見つかりませんでした。検索をお試しください。</p> 60 <?php get_search_form(); ?> 61 </div><!-- .page-content --> 62 </article> 63 64<?php endif; ?> 65 66 <p class="backToList"><a href="../">一覧ページに戻る</a></p> 67 68 </section> 69 </main> 70 71 </div><!-- #content --> 72 73<?php get_footer(); ?> 74<?php 75function output_single_calendar($year,$month) { 76 global $post; 77 78 //翌月、翌々月が年をまたぐ場合 79 if( $month > 12 ) { $year = $year+1; $month = $month-12; } 80 //月末日の取得 81 $l_day = date('t', strtotime($year.sprintf('%02d',$month).'01')); 82 //月初日の曜日の取得 83 $first_week = date('w',strtotime($year.sprintf('%02d',$month).'01')); 84 //祝日を取得 85 $holidays = japan_holiday_ics(); 86 87 $calendar = <<<EOM 88<table> 89 <caption>{$year}年{$month}月</caption> 90 <tr> 91 <th class="sun">日</th> 92 <th>月</th> 93 <th>火</th> 94 <th>水</th> 95 <th>木</th> 96 <th>金</th> 97 <th>土</th> 98 </tr> 99EOM; 100 /* calendar body start */ 101 for( $i=1; $i<=$l_day+$first_week; $i++ ) { 102 $day = $i-$first_week; 103 if( $i%7 == 1 ) { $calendar .= '<tr>'."\n"; } 104 if( $day <= 0 ) { 105 $calendar .= '<td> </td>'."\n"; 106 } else { 107 $key = 'date'.$year.sprintf('%02d',$month).sprintf('%02d',$day); 108 $value = get_post_meta($post->ID, $key, true); 109 if( $value == '休' ) { $value = '<span class="off">休業日</span>'; } 110 elseif( !$value ) { $value = '<span class="undecided">未設定</span>'; } 111 if( mktime(0,0,0,$month,$day,$year) == mktime(0,0,0,date('n'),date('j'),date('Y')) ) { $class=' class="today"'; } 112 elseif( date('w',mktime(0,0,0,$month,$day,$year)) == 0 ) { $class=' class="sun"'; } 113 elseif( !empty($holidays[date("Ymd", mktime(0,0,0,$month,$day,$year))]) ) { $class=' class="holiday"'; } 114 else { $class = ''; } 115 $calendar .= '<td'.$class.'>'; 116 $calendar .= '<span class="day">'.$day.'</span>'; 117 $calendar .= $value; 118 $calendar .= '</td>'."\n"; 119 } 120 } 121 if( $i%7 > 1 ) { 122 for( $td=0; $td<=7-($i%7); $td++) { 123 $calendar .= '<td> </td>'."\n"; 124 } 125 } 126 $calendar .= '</tr>'."\n"; 127 /* calendar body end */ 128 $calendar .= '</table>'."\n"; 129 $calendar .= '<p class="summary">◯…予約可能 ×…予約不可</p>'."\n"; 130 return $calendar; 131} 132?>
試したこと
if( $value == '休' ) { $value = '<span class="off">休業日</span>'; }
このコードで、休業日と指定された場合公開ページのカレンダーに休業日と表示されるので
日曜日に色を指定するclassを付加したように条件を与えてもclassが付きません。どこかが間違っているのだと思いますがコードなのか入力場所なのかわかりません・・・
入力したコード
elseif( $value == '休' ) { $class=' class="holiday"'; }
場所は上記if( $value == '休' ) { $value = '<span class="off">休業日</span>'; }
の下です。
補足情報(FW/ツールのバージョンなど)
wordpress5.0.3
PHP7.3.4
環境:XAMPP(ローカル)
参考サイト:http://do-wp.com/create-a-calendar-with-wordpress-custom-fields/#index-9
こちらのサイトの投稿者に質問しましたが、投稿からかなり期間がたっており返信がありません。
その他必要な情報があればコメントお願いします。
回答1件
あなたの回答
tips
プレビュー