
例えば「お知らせ」や「新着」などのニュースを表示するときに、投稿してから一定期間「NEW!」などの文字を表示したいケースは多いと思われる。テーマにそのような機能がない場合やそもそもテンプレートを自作しているようなときにはこうした機能も自分で作成する必要に迫られる。
プラグインなど簡単に実装できるものが見つかればいいのだがどうにも良いものが見つからないため、今回は自作することにした。とは言ってもコードはネットを参考に(というかほぼコピペで)作成を行った。
投稿してから一定期間のみ「NEW!」などの文字を表示したい時の対処方法について、自作のテンプレートなどでクエリーから記事を取得するようなケースであれば、閲覧した日付と投稿日の比較を行う。比較の結果、日数が任意の期間より短ければNEW!の文字を表示する。
まずは日付比較用の関数をテンプレートに記述、functions.phpでも可
function day_diff($date1, $date2) {
// 日付をUNIXタイムスタンプに変換
$timestamp1 = strtotime($date1);
$timestamp2 = strtotime($date2);
// 何秒離れているかを計算
$seconddiff = abs($timestamp2 - $timestamp1);
// 日数に変換
$daydiff = $seconddiff / (60 * 60 * 24);
// 戻り値
return $daydiff;
}
ループ内など、投稿日を取得できる箇所で現在と投稿日を上記の関数を使って比較
//本日の日付を取得
$today = date("Y-m-d");
//表示中の記事の投稿日取得
$posted = get_the_date('Y-m-d',$n);
// 日付を関数に渡す
$day = day_diff($today, $posted);
変数dayに現在日と投稿日までの日数が入力されるので、これを使用して処理を分岐させる
//1週間以内に投稿されていればNEW!を出す
if($day <7):
the_title();
echo "<span class="red">NEW!</span>"
else:
the_title();
endif;
if文の中の式を変更すれば1週間でも一ヶ月でも好きな日数に変更可能。記事の鮮度が重要なケースであれば1年以上前の記事に対して「OLD」などを付けることもできるのでアイデア次第で使い方が広がりそうである。