[wp + php]期間限定表示のギミックを仕込む方法

そんなに難しくないよ

活用シーン

夏季休暇のお知らせとかって、表示させたのはいいけど休み明けに消すのを忘れることがある。
それで怒られるのも嫌だから、じゃあ指定した期間だけ表示するギミックを仕込めばいい、という話。

今回はwordpressで作るとする。
wordpressならphpが使えるんで、jsじゃなくて済むんで、楽。

設置イメージ

wordpressで作ったサイトのトップページに期間限定のお知らせ表示を設置する。

準備と前提

固定ページをトップページにする

テーマのファイルに直接書いたらこの手間はなくなるんだけど、極力ファイルを触らずに管理画面上で管理できる方がいいのかな?と思う。

表示期間と表示内容を登録する必要があるんで、トップページはindex.phpとかじゃなくてpage.phpで作る。固定ページをトップページに指定すれば、トップページにカスタムフィールドが使えるようになる。まあ、トップページ用に固定ページを1つ作ってそこから引っ張ってもいいんだけど、ページを色々作って深いところに行っちゃうとどっから拾ってんだよって、仕様を忘れたり管理者変わったら混乱するかもしれないのであまりオススメしない。

「設定」→「表示設定」の「ホームページの表示」で固定ページをホームに指定できるんで、やる。

カスタムフィールドを仕込む

自作でもプラグインでもカスタムフィールドは作れるけど、個人的にAdvanced Custom Fieldsが管理しやすくて楽。

Advanced Custom Fields (ACF)
Advanced Custom Fields (ACF) helps you easily customize WordPress with powerful, professional and intuitive fields. Prou...

こんな感じで項目を作る。

ラベル名前タイプ
表示active真 / 偽
時限式period真 / 偽
開始年月日startデイトピッカー
終了年月日endデイトピッカー
タイトルttlテキスト
本文detailテキストエリア
デイトピッカーの表示・返り値のフォーマットはカスタムで「Y-m-d」にする。

ついでなので期間限定せずに表示できるギミックも仕込む。

カスタムフィールドを設定したら、トップページ用の固定ページで中身を記入する。

組んでいく

<?php
	$show = false;
	if(get_field('period')):
		$now = new DateTime();
		$today = $now->format('Y-m-d');
		$start = strtotime(get_field('start'));
		$end = strtotime(get_field('end'));
		if(strtotime($today) >= $start && strtotime($today) <= $end):
			$show = true;
		endif;
	endif;
	if( get_field('active')):
		$show = true;
	endif;
 ?>
<?php if($show == true): ?>
    <!-- 表示したい内容 -->
    <h1><span><?php the_field('ttl'); ?></span></h1>
    <p><?php the_field('detail'); ?></p>
<?php endif; ?>

こんな感じ。

「end」が掲載最終日になるようにしてるので、その翌日から非表示になる。

$showがtrueになってれば表示するようにして、その条件を書いてる。

「 表示 」にチェックがあれば期間を無視して強制的にtrueになる。

みたいな。

コメント

タイトルとURLをコピーしました