WordPressで更新日時に「当日だけ」時間を表示する方法

      2018/04/07

time

WordPressでブログを書いている場合、記事の公開日や更新日を表示している人が多いと思います。日付に時間を表示するか悩んでいたんですが、読者が更新「時間」が知りたいのは更新当日だけだと思うので、当日だけ時間を表示するようにしました。

SPONSORED LINK

やりたいこと

更新した当日やこまめに更新しているページ(何かの発表のライブアップデートなど)の場合、更新時間も表示した方が親切だと思います。でも一方で、3ヶ月前に更新されたページの更新時間なんてほとんどの人は興味ありませんよね。

そこで日付が今日なのか判定して、時間を表示するか分岐するようにしました。

ついでに公開日や更新日がGoogleに認識されるようにtimeタグも使っておきましたよ。

SPONSORED LINK

ソースコード

関数 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>&nbsp;
		<?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');
				} ?>
			&nbsp;
			<i class="fa fa-repeat"></i>&nbsp;
			<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>
			&nbsp;
		<?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');

これで利便性を保ちつつ無駄な表示を無くすことができました。

itjo レスポンシブ 本文下

 - WordPress
 - , , ,