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

そんなに難しくないよ

活用シーン

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

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

設置イメージ

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

準備と前提

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

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

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

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

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

Advanced Custom Fields
パワフルでプロ仕様、そして直感的なフィールドで WordPress をカスタマイズ。

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

ラベル名前タイプ
表示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; ?>

こんな感じ。

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

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

みたいな。

コメント

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