時事情報を配信するサイトやこのサイトのようにWordPressの使い方などを紹介する記事の多いサイトの場合、情報の鮮度によっては今にそぐわない内容であったり、動作しないコードであったりすることがあります。
そうなったらその記事は削除するというのが一番親切ではあるのですが、せっかく時間をかけて書いた記事を削除することはもったいない話ですし、結構過去記事が検索経由で閲覧されることも多いですから制作者としても本当にもったいない話だと思います。
が、やはり古い情報をそのままにしておくことで、訪問してくれた方に不親切ですし、何より訪問された方から「役に立たなかった」などと勝手な印象を持たれたり、ひどい場合にはSNSなどで誹謗中傷をされるなど思わぬところで被害が出ることもありますから気を付けたいところ。
今回は記事の最終更新日から指定した期間を過ぎると自動で本文内へ「この記事は凄く昔のものですよ!」とメッセージを表示することができる方法を紹介します。
と言っても普遍的な内容の記事にこのメッセージをわざわざ表示することで、本当は正しい情報なのに間違って「古いですよ!」と伝えてしまうケースも存在するでしょうから、ちょっと工夫して、ショートコードを挿入しておくことで古い記事でメッセージを出す必要がある記事にのみ表示させることができるようにしました。
※今回紹介する方法はオリジナルテーマを作成するにあたり、投稿や固定ページ本文の任意の場所へ新着記事一覧をショートコードで挿入できるようにした仕組みの応用です。
大きな仕組みというか流れとしては
- テーマフォルダ内に部品(必要な機能を持つテンプレート)を作る
- ショートコードを本文内へ挿入することでテンプレートを動作させた状態で表示する
というものです。ご存知の通り、WordPressではPHPコードを本文内へ書いて実行することができません。これはコメント欄へ任意のPHPコードを書いて実行されてしまうのを防ぐためのセキュリティ機能ですので、何等かのプラグインを使ってPHPが実行できるようにするのはとても危険ですから、今回のようにショートコード化して実行する必要があるのです。
この仕組みは何かを指定してショートコードで挿入する系のプラグインでは必須の流れですから覚えておいて損はないと思いますよ。
最終更新日から一定期間経過した記事の任意の場所へメッセージを表示する方法
ショートコードでテーマファイルのテンプレートを実行する仕組みを作る
テーマのfunctions.php末尾へ以下のコードを追加します。
//ショートコードを使ったphpファイルの呼び出し
function my_php_Include($params = array()) {
extract(shortcode_atts(array('file' => 'default'), $params));
ob_start();
include(STYLESHEETPATH . "/$file.php");
return ob_get_clean();
}
add_shortcode('myphp', 'my_php_Include');
※functions.phpの編集に失敗するとWordPressのバージョンによってはエラーメッセージが出たり、画面が真っ白になったりすることがありますので、バックアップなどを取りつつ作業してください。
このコードを追加することで
[myphp file='ファイル名']
というショートコードを本文内へ挿入すると、そのテンプレートが呼び出され、動作した状態で表示されるようになります。
※「ファイル名」の部分はテンプレートファイル名を入れてください
メッセージを表示するためのテンプレートを作り、テーマフォルダ内へアップロードする
次にメッセージを表示させるためのコードを作り、「modday-alert.php」というファイルを作ります
コピペされる場合は以下のコードをそのままテキストエディタなどに貼り付けてください。
<?php if ( date('U') - get_the_modified_time('U') > 60*60*24*180 ) { ?>
<div class="old-post-alert">
<p>この記事は<time class="entry-date date" datetime="<?php echo get_the_date( 'Y-m-d' ); ?>"><?php echo get_the_date(); ?></time>に公開され、<time class="update date" datetime="<?php echo get_the_date( 'Y-m-d' ); ?>"><?php the_modified_date(); ?></time>に最終更新されたもので、内容が古い可能性がありますのでご注意ください。</p>
</div>
<?php }?>
貼り付けたら「modday-alert.php」というファイル名+拡張子名で保存してください
※この際文字コードを「UTF-8 BOMなし」にしないと動作しないので注意してください
参考記事:
上のコードをそのまま使って表示されるメッセージは以下のようになります(枠線や背景などのデザインは後述するCSSで指定する必要があります)。
ファイルをFTPクライアントなどを使ってテーマフォルダ内へアップロードします。
FTPが使えない環境の方は以下の方法もありだと思います
(ただし不具合が出た場合にはサーバーのファイルマネージャーやFTPを使った修復が必要になりますので、あくまでもFTPなどが使えるけど面倒だから管理画面から操作した人向けの方法です)
※デザインを↑の画像と同じようにするには以下のCSSコードをテーマのCSS末尾へ追記してください
/****** 古い記事のお知らせ ******/
.old-post-alert {
background-color: #feffd9;
border: 1px solid #ffdc00;
border-radius: 8px;
padding: 10px;
margin-bottom: 20px;
}
.old-post-alert p {
margin-bottom: 0px;
}
メッセージを表示したい場所へショートコードを挿入する
前項でも説明しましたが、任意の場所へショートコードを挿入することで実行結果が表示されます。
今回の場合は「modday-alert」という最終更新から一定期間経過したらメッセージを出すというテンプレートを作りましたので、
[myphp file='modday-alert']
というショートコードを挿入します。
投稿テンプレート(single.php)で使うときは
もちろん投稿用のテンプレート(single.php)へあらかじめ挿入しておき、時期が過ぎたら自動で表示させるようにすることもできます。
single.phpを開き、表示させたい場所へ以下のコードを挿入するだけです
<?php get_template_part('modday-alert');?>
また、せっかくなのでショートコードのままで挿入したいという方は
<!--古い記事に対する案内-->
<?php echo do_shortcode("[myphp file='modday-alert']"); ?>
を挿入しても同じ結果が得られます。
どうでしたか??できるだけ簡単に説明したつもりですが、初心者の方にはわかりにくい内容だったかも知れません。順番に落ち着いて設置していけば難しいことではありませんからぜひチャレンジしてみてください。
冒頭で書いたようにこの仕組みを使えば他のテンプレート(新着記事の一覧など)も表示できるようになりますので覚えておいて損はないと思います。