役に立つかもしれないBlogお問い合わせトップITWEB開発CMSMovableTypeMovableTypeでエントリー中に関連記事リストを表示させるMovableTypeでエントリー中に関連記事リストを表示させる「GIGAZINE(ギガジン)」といえば、知らない人はいないでしょう。日々新発売のお菓子のレビューから最新のIT技術記事、海外の奇怪な現象までも網羅するモンスター級のニュースサイトです。GIGAZINEで秀逸な機能といえば記事本文の下に表示される「関連記事」があります。関連記事はその名の通り、記事本文と関係がある、もしくはつながりがある他の記事へのリンクをリスト形式で表示している部分。詳細化されたカテゴリー情報、あるいはタグキーワードによる分類を用いて表示されていると思うのですが、記事読後に残った知的好奇心をくすぐられ、ついついクリックしたくなってしまいます。最近ではサイトの質を評価する基準として「サイト滞在時間」が重要視されてきていますので、サイトの価値を高めるのにも非常に良い機能ではないかと思います。そこで、MovableTypeでもこの「関連記事」機能を実装してみましょう。MovableType4.x用のカテゴリー関連記事表示MovableType4.xについては便利な<MTSetVarBlock>タグや、<MTIf>タグがありますのでエレガントに組み合わせます。href="<$MTEntryLink$>"><$MTEntryTitle$></a></li></MTIf></MTEntries></ul>ポイントは掲載したい記事リスト数+1の数を「lastn」に設定することです。関連記事リストには現在見ている記事そのものも含まれているので<MTIf>で除外しました。それでは件数が1件減ってしまうので、1件余分にリストアップしておくんですね。※MovableType3.x用の関連記事表示については次の項目に掲載しています。MovableType3.x用の関連記事表示この関連記事表示機能はmt-relatedentriesプラグインを利用すればあっさりと出来てしまうのですが、ユーザー登録が必要なので、イヤな方もいらっしゃるかもしれません。いうわけで、ちょっと違った方向で作っていくことにしましょう。追記:日本の方が作成されたTagSupplementalsプラグインというのもあります。関連度をタグに限定して表示させたい場合はお勧めです。mt-relatedentriesプラグインとは異なる2つのサードパーティー製プラグインを入手します。とも、解凍後MovableTypeのpluginsディレクトリに直接放り込めば使えるようになります。その1:エントリー個別記事の中で、同じカテゴリーの記事一覧を表示MovableTypeで「え?これ標準機能で出来ないの?」と思ってしまうのが「エントリー個別記事の中で、同じカテゴリの記事一覧を表示」するという機能です。これをMTTagInvokeプラグインを使って<MTEntries>の中でカテゴリーを指定してしまおう、というわけです。title="<$MTEntryTitle$>"><$MTEntryTitle$></a></li></MTTagInvokeContent></MTTagInvoke></ul>上の例では、カテゴリーを指定して、最新の5件を表示するようにしています。一応これで(同一カテゴリーという意味での)関連記事を表示させることができました。関連記事を出したい人の中には「いやいや、いちいちカテゴリーなんて作ってられないよ。タグキーワード分類に決まってるじゃん。」というようにタグキーワードで分類された記事を表示させたい人もいらっしゃると思いますので、その方法も掲載しておきます。タグキーワードを利用してフィルタリングする場合も<MTTagInvoke>を利用します。」で区切ってtagsアトリビュートに指定する必要があります。これを<MTTagInvoke>を使って生成すればOKです。title="<$MTEntryTitle$>"><$MTEntryTitle$></a></li></MTTagInvokeContent></MTEntryIfTagged></MTTagInvoke></ul>さりげなく<MTEntryIfTagged>が使われていますが、これで挟まないとタグ付けしていない記事同士でも関連記事に出てきてしまいますので、必ず記述しておきましょう。現在表示されている記事を関連記事リストから除外するここで1つ問題が起こります。それは「現在表示されている記事自身も関連記事に表示されてしまう」ということです。自分自身はもう表示されているわけですから、当然除外しないといけません。MovableType」です。このプラグインを使うと、MTタグ内でいわゆる「if文」のような表現が使えます。MovableType4になって<MTIf>というタグが登場しましたが、MovableType3.xまでは貧弱な分岐タグしかありません。このプラグインでサポートされる<MTIfNotEqual>タグと、前述のMTInvokeプラグイン、<MTSetVar>タグ、<MTGetVar>タグを組み合わせることで、自分自身の記事リンクをリストからを取り除くことができます。それではやってみましょう。表示されている個別記事自身のエントリーIDを<MTSetVar>でbaseEntryIDとでも名前をつけて変数に入れておきます。エントリー記事本文が表示される直前にでも書いておくと良いでしょう。name="value"><$MTEntryID$></MTTagInvokeAttribute></MTTagInvoke>次に、関連記事を表示させる箇所で<MTIfNotEqual>を使って、関連記事のエントリーIDと先ほど記憶しておいたbaseEntryIDとを比較して、異なっていたら関連記事として表示されるようにします。title="<$MTEntryTitle$>"><$MTEntryTitle$></a></li></MTIfNotEqual></MTTagInvokeContent></MTTagInvoke></ul>これで完成です。最新記事からリストアップされていきますので、古いエントリーを出したりランダムに出すにはもう一工夫必要かもしれませんが、これで滞在時間もアップしてくれるのではないでしょうか。田舎に生まれ育ち東京へ。技術はDTPデザインからプログラミングまで、インフラはCD-ROM全盛からクラウドサーバーまで、いろいろなビジネスを作り、関わってきました(知見を生かして専門学校の講師も3年ほど)。今ではAWSで月間100万PVを超えるサービスを制作・運営しながらさらなるノウハウを蓄積中。このサイトではビジネスをITコンサルタント視点で考え、感じた知見や経験が世の中のお役に立てば、という視点で無料記事として公開しています。最近は機械学習による仕事の効率化を研究中。reserved.代表者のライフハックブログ。