古い投稿への警告表示

この記事は1年以上前に書かれました。
内容が古くなっている可能性がありますのでご注意下さい。


当サイトの開設から2年以上経過し、技術を解説した古い記事は、利用したOSSのバージョンアップ等によって現在では内容が有効でなくなっている可能性があります。そこで、投稿から1年以上経過した技術解説記事には、その旨警告表示することとしました。

そのために簡単なWordPressプラグインを作成し、GitHubにて公開しました。

https://github.com/midoriit/wp-old-warn

記事中にショートコード [old_warn] を記述しておくと、その記事を投稿してから1年以上経過した場合に、その箇所に警告文が出力されます。
わざわざショートコードを記述する仕様としたのは、古くなっても警告を表示する必要のない記事もあるためです。記事によって警告表示の有無を制御する方法には、カテゴリによる方法やカスタムフィールドによる方法も考えられますが、出力位置の指定も兼ねて、ショートコードによって指定することとしました。
また、警告は個別投稿表示の場合のみ出力し、カテゴリやタグによる一覧表示の場合には出力しません。

プログラムは以下の通りです。

<?php
/*
  Plugin Name: Old Post Warning
  Plugin URI: 
  Description: Show warning on old post.
  Version: 0.1
  Author: Midori IT Office, LLC
  Author URI: http://midoriit.com/
  License: GPLv2 or later
*/
function old_warn_handler( $atts ) {
    if ( is_single() )  {
        if( date('U') - get_the_time('U') > 60*60*24*365 ) { 
            return '<p><div class="old_post_warning">
                この記事は1年以上前に書かれました。<br/>
                内容が古くなっている可能性がありますのでご注意下さい。</div></p>';
        }
    }
}
add_shortcode('old_warn', 'old_warn_handler');
/*
 * CSS for Warning
 */
add_action( 'wp_print_styles', 'old_warn_css' );
function old_warn_css() {
    $css_file = plugins_url( 'wp-old-warn.css', __FILE__ );
    wp_enqueue_style( 'wp_old_warn', $css_file );
}
?>

add_shortcode()で登録したショートコードのハンドラold_warn_handler()では、is_single()で個別投稿ページかどうかを判定し、現在時刻と投稿時刻の差によって出力判定をしています。判定条件を変更した場合は、ベタ書きしてある警告メッセージも変更します。
警告のdivには独自のCSSクラスを指定し、wp_enqueue_style()でCSSファイルを読み込んで適用します。
CSSは以下の通りです。

.old_post_warning {
    display: inline-block;
    padding: 5px 15px 5px 15px;
    background-color: #cfc;
}