WordPressで更新日時に「当日だけ」時間を表示する方法
2018/04/07
WordPressでブログを書いている場合、記事の公開日や更新日を表示している人が多いと思います。日付に時間を表示するか悩んでいたんですが、読者が更新「時間」が知りたいのは更新当日だけだと思うので、当日だけ時間を表示するようにしました。
やりたいこと
更新した当日やこまめに更新しているページ(何かの発表のライブアップデートなど)の場合、更新時間も表示した方が親切だと思います。でも一方で、3ヶ月前に更新されたページの更新時間なんてほとんどの人は興味ありませんよね。
そこで日付が今日なのか判定して、時間を表示するか分岐するようにしました。
ついでに公開日や更新日がGoogleに認識されるようにtimeタグも使っておきましたよ。
ソースコード
関数 get_mtime()
まずは更新日を 賢く 取得する関数 get_mtime() を定義します。有名な関数なのでStinger5などのテーマを使っている場合はfunction.phpにすでに定義されているかもしれませんが、それを改変しています。
//更新日の追加 function get_mtime($format) { $mtime = get_the_modified_time('Ymd'); $ptime = get_the_time('Ymd'); $mmin = get_the_modified_time('Hi'); $pmin = get_the_time('Hi'); if ($ptime > $mtime) { return get_the_time($format); } elseif ($ptime === $mtime) { if ($pmin > $mmin) { return get_the_time($format); } elseif ($pmin == $mmin) { return null; } else { return get_the_modified_time($format); } } else { return get_the_modified_time($format); } }
元々の関数では日付が一致していれば更新日を返しませんが、この関数では時間まで一致している(か過去に更新された)場合のみ null を返して、それ以外では更新日を返すようにしています。
HTML
定義し直した get_mtime() を使って、こんな風に書きました。
<div class="blogbox"> <p><span class="kdate"> <i class="fa fa-calendar"></i> <?php date_default_timezone_set('Asia/Tokyo'); ?> <?php if ($mtime = get_mtime('Y/m/d H:i')){ ?> <?php if(get_the_time('Y/m/d') == date('Y/m/d')){ echo get_the_time('Y/m/d H:i'); }else{ echo get_the_time('Y/m/d'); } ?> <i class="fa fa-repeat"></i> <time class="entry-date" datetime="<?php echo get_mtime('c'); ?>"> <?php if(get_mtime('Y/m/d') == date('Y/m/d')){ echo get_mtime('Y/m/d H:i'); }else{ echo get_mtime('Y/m/d'); } ?> </time> <?php }else{ ?> <time class="entry-date" datetime="<?php the_time('c') ;?>"> <?php if(get_the_time('Y/m/d') == date('Y/m/d')){ the_time('Y/m/d H:i'); }else{ the_time('Y/m/d'); } ?> </time> <?php } ?> </span> </p> </div>
簡単な解説
ベースは有名なWordPressテーマ「Stinger5」です。 最初に更新日時を表示するかどうか判定します。
if ($mtime = get_mtime('Y/m/d H:i'))
trueなら更新日時と公開日時が両方必要、falseなら公開日時だけを表示(更新日時が公開日時と同一か過去)します。
あとは、それぞれの日付が今日と同一か比較して、今日の場合だけ時間を表示します。
if(get_the_time('Y/m/d') == date('Y/m/d')){ echo get_the_time('Y/m/d H:i'); }else{ echo get_the_time('Y/m/d'); }
注意したいのが、date()関数はグリニッジ標準時を出す可能性があるので、最初にこちらの関数で時刻帯を指定しています。
date_default_timezone_set('Asia/Tokyo');
これで利便性を保ちつつ無駄な表示を無くすことができました。