ブログを長く運営しているとどうしても「情報が古くなった記事」が増えてきます。
特にIT関連の記事ではソフトウェアの仕様や料金、サービス内容などが変更され、公開当時は正しかった内容が現在では通用しなくなっていることも珍しくありません。
もちろん記事を定期的に見直すのが理想ですが、記事数が増えてくるとすべての記事を最新の状態に保つのはなかなか難しくなってきます。
そこで、公開から1年以上経過した記事の冒頭に「情報が古い可能性がある」という注意文を自動的に表示することにしました。
仕様
以下のような仕様で実装します。
- 注意文をSWELLのブログパーツとして作成する
- functions.phpで記事の公開日を判定する
- 公開から1年以上経過していたらブログパーツを本文冒頭に挿入する
表示する注意文
注意文は次のような内容にしました。
この記事は公開から一年以上が経過しています。
内容が現在の状況と一致しない場合があります。
あらかじめご了承のうえ、参考程度にご覧ください。
あまり強い警告にはせず、「古い情報である可能性を理解したうえで参考にしてください」という程度の表現にしています。
また、記事の公開日は記事ヘッダー部分に表示されているため注意文には具体的な公開日を記載しないことにしました。
SWELLの「ブログパーツ」を利用する
当ブログではWordPressテーマに「SWELL」を使用しています。
SWELLには「ブログパーツ」という機能があり、あらかじめ作成したコンテンツをさまざまな場所に埋め込むことができます。
ブログパーツの作り方の詳細は割愛しますが、私は「段落」ブロックで作って「アナウンス」スタイルを当てました。
SWELLの各種ブロックが利用できるので注意文をボックスで囲ったりアイコンを付けたりといったデザイン変更も簡単です。
また、同じブログパーツを複数の記事で共有するため、パーツを変更すれば対象となるすべての記事に一括で反映されます。
functions.phpに処理を追加する
子テーマのfunctions.phpを次のように修正します。
add_filter('after_setup_theme', function() {
// 公開日が指定の日数より前の場合は警告文を表示する
add_filter('the_content', 'add_old_post_notice_by_publish_date');
// 公開日の判定とブログパーツの埋め込み
function add_old_post_notice_by_publish_date($content)
{
// 個別記事ページのみ(固定ページにも出したいなら is_singular() に変更)
if (!is_single() || !in_the_loop() || !is_main_query()) {
return $content;
}
// 何日以上前を「古い」とするか
$days = 365;
// 公開日(Unix time)
$published_time = get_the_time('U');
$now = current_time('U');
if (($now - $published_time) > ($days * DAY_IN_SECONDS)) {
// SWELLブログパーツ(投稿ID)
$blog_parts_id = 1234;
// ブログパーツをショートコードで呼び出して本文冒頭へ
$notice = do_shortcode('');
$content = $notice . $content;
}
return $content;
}
}, 11);$blog_parts_id = 1234;の1234の部分は実際に作成したブログパーツのIDに変更します。
また、親テーマのfunctions.phpを直接変更するとテーマのアップデート時に変更内容が失われる可能性があるため子テーマのfunctions.phpに記述します。
上記のコードはSWELLのものです。
テーマによって微妙な違いがありますのでご注意ください。
「更新日」ではなく「公開日」で判定する
今回のポイントのひとつが注意文の出し分け基準を最終更新日ではなく公開日にしていることです。
たとえば3年前に公開した記事の誤字を今日修正したとします。
更新日を基準にするとこの操作だけで「新しい記事」と判定されて注意文が表示されなくなってしまいます。
しかし、記事の本質的な内容が3年前のままであればそれを最新情報として扱うのは少し違和感があります。
そのため今回は「公開から1年以上経過した記事には更新日に関係なく注意文を表示する」という考え方にしました。
まとめ
今回の仕組みでは記事を公開してから1年以上経過すると自動的に記事冒頭へ注意文が表示されます。
新しい記事では何も表示されず、1年が経過した時点で自動的に表示対象になるため記事ごとに手作業で設定する必要もありません。
長くブログを運営していると、古い記事の扱いはどうしても問題になってきます。
過去の記事をすべて削除したり、常に最新情報へ書き換えたりするのではなく、「この記事には古い情報が含まれている可能性があります」と読者に分かるようにしておくのも、ひとつの方法ではないでしょうか。

コメント