[WordPress]公開日・更新日を元に記事に「New」ラベルを表示する

  • 更新日:
  • 公開日:

WordPressの記事更新情報などで、例えば「記事を公開してから7日間は”New”という文字(ラベル)を表示したい」というご要望があったりします。

日付を比較し表示する方法が書かれてある記事はあった記憶があるのですが、見当たらなくなってしまいました。

自分でも関数化して使い回しておりますが毎度スニペットアプリを見直したり、過去のコードを探したりする手間を省くため記事にもメモしておきます。

公開日・更新日を元に記事に「New」ラベルを表示

functions.phpに以下の関数を追加します。

<?php
/**
* 記事の公開、更新日に合わせて「New」ラベルの表示
*
* @param int $days 公開(更新)されてからラベルを表示する日数
* @param string $label_text ラベルに表示するテキストを指定
* @param string $class クラス名を指定
* @param string $date_type ラベルの表示条件が公開日なら'release'、更新日なら'modified'
* @param int|WP_Post $post WP_Post object or ID. Default is global $post object.
*/
function the_new_label( $days = 3, $label_text = 'New', $class = 'label', $date_type = 'release', $post = null ) {
$today = date_i18n( 'U' );
$date = get_the_time( 'U', $post );
if ( $date_type === 'modified' ) {
$date = get_the_modified_date( 'U', $post );
}
$elapsed = date( 'U', ( $today - $date ) ) / 86400;
if ( $days > $elapsed ) {
echo '<span class="' . $class . '">' . $label_text . '</span>';
}
}

デフォルト引数を指定しているので、以下のようにそのままテンプレートタグとして使用できるようにしてあります。一応記事ループ外で使用してもエラーが起きないようにしているハズですが、使うときは記事ループ内に記述してください。

<?php the_new_label(); ?>

<!-- 初期状態で出力されるHTML -->
<span class="label">New</span>
PHP

初期状態では

  • ラベルのテキストは「New」
  • クラス名は「label」
  • 記事を公開してから7日間表示

となっています。

更新日を元にラベルを表示する例

この仕様を変更したい場合は、以下のように別の値を指定してください。更新日を元に表示する場合は第4引数に「‘modified’」を指定してください。

<?php the_new_label( 3, 'NEW!', 'label label--red', 'modified' ); ?>

<!-- 出力されるHTML -->
<span class="label label--red">NEW!</span>
PHP

この引数指定だと

  • 更新日を元に3日間ラベルを表示
  • クラス名は「label label–red」という複合クラス
  • ラベルのテキストは「NEW!」

となります。


あまり引数を増やすのは関数設計としてはよろしくないようですが、致し方ないということで…。なるべく重要度を元に引数の順番を設定しておきました。

書いた人

Symbol Mark

Ryoichi(しつ)

除菌ティッシュを買い込んで使いきれずによく乾かす人。

療養目的で退職し、どうやって生きていくか模索中。最近は勉強目的でLaravelやVue.js弄ったり、趣味で音で遊んでます。

※2019年10月16日現在ブログリニューアル中です。崩れなどが発生していたらすみません。

うぇぶ: @s_ryone