Luxeritasで、古い記事にメッセージや警告文を表示する方法(子テーマ)

2017年9月14日WordPress,技術

この記事は2017年8月23日に書かれたものです。ご注意ください。

1年前の記事とか更新する事って少ないですよね。そんなときに「この記事は古いですよー」って一応アナウンスしておきたい。

と思って調べたら、以下の記事にてコードが紹介してありました。


ただこれ、読んでみると「親テーマ」を書き換えてるんですよ。いやいやいや… 便利な子テーマがあるんだし、functions.phpで対応しようぜ?と思い書いたコードが以下になります。

function old_contents( $content ){
    if( in_category(array('wordpress', 'technology', 'ソフトウェア')) && date('U') - get_the_time('U') > 60*60*24*365 ) {
        $created = get_the_time(get_option('date_format'));
        $content = '<div class="old-post-message"><p class="red">この記事は'.$created.'に書かれたものです。ご注意ください。</p></div>'. $content;
    }
    return $content;
}
add_filter( 'thk_content', 'old_contents', 11, 1 );

コードの解説的な?

まず初めにLuxeritasには投稿記事用のフィルター「thk_content」が追加されているのでこれを活用します。書き方もリンク先にコードが載っていたので、それを拝借… これで大枠は完成。

function old_contents( $content ){
}
add_filter( 'thk_content', 'old_contents', 11, 1 );

つづいて注意文を出す「分岐(if)」を作成します。

if( in_category(array('wordpress', 'technology', 'ソフトウェア')) && date('U') - get_the_time('U') > 60*60*24*365 ) {
}

in_category(array('wordpress', 'technology', 'ソフトウェア'))はどのカテゴリーで表示させるかを指定(指定したいカテゴリーが複数ある場合はarray()で配列として記載する必要性があるそうです)。
date('U') - get_the_time('U') > 60*60*24*365はいつより前の時間に対して表示させるかを指定できます。
これらを指定することで「カテゴリーが“wordpress, technology, ソフトウェア” かつ 公開日が“1年以上前” の記事に対して、なにかをする」ことができるようになりました。

さて、分岐ができましたので「なにをする」かを作成します。

$created = get_the_time(get_option('date_format'));
$content = '<div class="old-post-message"><p class="red">この記事は'.$created.'に書かれたものです。ご注意ください。</p></div>'. $content;

$created = get_the_time(get_option('date_format'));で記事の公開日を取得し、$content = '<div class="old-post-message"><p class="red">この記事は'.$created.'に書かれたものです。ご注意ください。</p></div>'. $content;で注意文を記載します。

最初の$content = は“記事のソースを入れる変数”で、最後の. $content;は“元々の記事のソースが入った変数”です。つまり元々の記事のソースの頭に「注意文」を付与して、それを返すって感じです(語彙力のなさ)。

そしてこのままでは記事が返ってこないので

return $content;

で記事の内容を返します。ifに該当すれば「注意文+記事」、該当しなければ「記事」だけが返ってくる感じです。

add_filter( 'thk_content', 'old_contents', 11, 1 );の「thk_content」を変更すれば他のテーマでも活用できるかと思います。(the_contentだと固定ページも含まれてしまう気がするので、ifでいまくスルーさせるか他のフィルターを使うか、うまく編集してみて下さいな。私はなにも知りませんので…)