質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1867閲覧

wordpressで日祝日などが色付きのオリジナルカレンダーを作りたい

alesta

総合スコア16

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/07/15 15:58

前提・実現したいこと

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>&nbsp;</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>&nbsp;</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
こちらのサイトの投稿者に質問しましたが、投稿からかなり期間がたっており返信がありません。
その他必要な情報があればコメントお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/07/16 01:38

>付加したように条件を与えてもclassが付きません これはブラウザのデベロッパツールや「ソースを表示」で確認したということですか? 各分岐にecho を入れてデバッグしてみてはどうでしょうか?要は「そこを通ってる」確認ですね。
alesta

2019/07/16 14:27

コメントありがとうございます。 FFのウェブ開発のインスペクターを使って確認しましたが、クラスが付加されていませんでした。 今回は無事に解決したので、フォーラムを使うことがあれば利用してみようと思います。
guest

回答1

0

ベストアンサー

入力したコード

elseif( $value == '休' ) { $class=' class="holiday"'; }
場所は上記if( $value == '休' ) { $value = '<span class="off">休業日</span>'; }
の下です。

とのことですが、

php

1if( $value == '休' ) { $value = '<span class="off">休業日</span>'; } 2elseif( $value == '休' ) { $class=' class="holiday"'; }

このようになっていると

elseif 文は、前にある全ての if 文と elseif の値が FALSE であり、 現在の elseif 式の値が TRUE である場合にのみ実行されます。

PHP: elseif/else if - Manual

ですので $value = '休' の場合に $class = ... は決して実行されません。

php

1<?php 2if ( '休' === $value ) { 3 $value = '<span class="off">休業日</span>'; 4 $class = ' class="holiday"'; 5}

としてください。

投稿2019/07/16 05:21

YukiYamashina

総合スコア1011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alesta

2019/07/16 14:20

回答ありがとうございました。 条件付き書式の構造をよく理解しないまま使っていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問