WordPressの記事更新情報などで、例えば「記事を公開してから7日間は”New”という文字(ラベル)を表示したい」というご要望があったりします。
日付を比較し表示する方法が書かれてある記事はあった記憶があるのですが、見当たらなくなってしまいました。
自分でも関数化して使い回しておりますが毎度スニペットアプリを見直したり、過去のコードを探したりする手間を省くため記事にもメモしておきます。
公開日・更新日を元に記事に「New」ラベルを表示
functions.phpに以下の関数を追加します。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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>'; | |
} | |
} |
デフォルト引数を指定しているので、以下のようにそのままテンプレートタグとして使用できるようにしてあります。一応記事ループ外で使用してもエラーが起きないようにしているハズですが、使うときは記事ループ内に記述してください。
初期状態では
- ラベルのテキストは「New」
- クラス名は「label」
- 記事を公開してから7日間表示
となっています。
更新日を元にラベルを表示する例
この仕様を変更したい場合は、以下のように別の値を指定してください。更新日を元に表示する場合は第4引数に「‘modified’」を指定してください。
この引数指定だと
- 更新日を元に3日間ラベルを表示
- クラス名は「label label–red」という複合クラス
- ラベルのテキストは「NEW!」
となります。
あまり引数を増やすのは関数設計としてはよろしくないようですが、致し方ないということで…。なるべく重要度を元に引数の順番を設定しておきました。