投稿の公開日と更新日の表示

投稿の公開日と更新日の表示
Image by Comfreak from Pixabay

2021.04.15(更新日:2021.04.15)

このサイトみたいな情報系の記事は古いと使えない場合もある。
判断材料として記事の公開日を表示するが、更新日も表示させてあげると「より親切」と感じた。
そこでこのサイトでも使用しているコードを公開。

この記事は1年以上経過しています。内容的に古い場合があります。

WordPressの公開日、更新日の取得と現在の比較

WordPressにはそれ専用のタグがある。

/* PHP */
get_the_date('Y-m-d') //公開日を取得
get_the_modified_date('Y-m-d') //更新日の取得

引数にはそれぞれ日付フォーマットを入れる。第2引数は省略しているが、指定した記事の値を取得したい場合は「投稿ID」を入れる。省略時は現在の投稿IDが使用される。

PHPで現在の日時を取得し比較

DateTimeでフォーマット化した現在の日時と公開日と更新日を取得しそれぞれ比較する。
日時の比較は「diff」が便利。差分を返却させた上で分岐させる。

/* PHP */
$now = new DateTime(); //現在
$release = new DateTime( get_the_date('Y-m-d') ); //公開日
$modified = new DateTime( get_the_modified_date('Y-m-d') ); //更新日
$diffrel = $now->diff( $release ); //現在と公開日の差分
$diffmod = $now->diff( $modified ); //現在と更新日の差分

期限を決めて表示

記事の賞味期限は「1年」とした。公開日、更新日ともに1年経過したら「古いですよ」を表示させる。
更新日は記事をアップしてから少しの間「文章的にどうなの?」的な部分をちょこちょこ直すことも多いので「120日」経過したら表示させることにした。

/* Your code... */
$html = '';
$now = new DateTime(); //現在
$release = new DateTime( get_the_date('Y-m-d') ); //公開日
$modified = new DateTime( get_the_modified_date('Y-m-d') ); //更新日
$diffrel = $now->diff( $release ); //現在と公開日の差分
$diffmod = $now->diff( $modified ); //現在と更新日の差分

//120日経過したら更新日を表示
if( (int)$diffmod->format( '%a' ) > 120 ){
  $html .= '<p class="dates"><span>' . get_the_date() . '(更新日:'. get_the_modified_date() . ')' . '</span></p>' . "\n";
} else {
  $html .= '<p class="dates"><span>' . get_the_date() . '</span></p>' . "\n";
}
//公開日と更新日が1年(365)経過したらメッセージ
if( (int)$diffrel->format( '%a' ) > 365 && (int)$diffmod->format( '%a' ) > 365 ){
  $html .= '<p class="bestBydate">この記事は1年以上経過。古いですよ。</p>' . "\n";
}

後は表示させるだけ。

echo $html;