サイト内回遊を高めるために有効な関連記事表示。
これを自分のブログにも実装してみようと調べてみました。きっとプラグインがあるだろうと思ったら予想通りいくつか発見しましたのでここで紹介しようと思います。
ざっと見渡してよさそうだったのは以下の3つ。
- RelatedEntriesプラグイン
こちらは各記事の編集画面から手動で関連記事を紐付けていきます。 - TagSupplementalsプラグイン
こちらは記事につけられたタグをキーに関連記事を自動で紐付けていきます。 - MTSetVar(Block)/MTIfタグを駆使して実装。
こちらも記事につけられたタグから自動表示。
個人的にタグ管理がよかったので「TagSupplementals」をインストール。
ちなみに「RelatedEntries」の実装方法はこちらに詳しく説明してありましたのでよかったらどうぞ。
まずはこちらの配布サイトからプラグインを取得します。
解凍したらplugin以下にTagSupplementalsをアップロード。
管理画面のプラグイン一覧から確認できればOKです。
これで以下のタグが使用できるようになります。
- MTEntryTagsCount変数タグ
- MTRelatedEntriesコンテナタグ
- MTRelatedTags コンテナタグ
- MTArchiveTagsコンテナタグ
- MTTagLastUpdated変数タグ
- encode_urlplus グローバルフィルタ
- MTSearchTagsコンテナタグ(MT-Search用のテンプレート内でのみ利用可能)
- MTXSearchTags コンテナタグ(MT-XSearchインストール時のみ利用可能)
- MTTagXSearchLink変数タグ(MT-XSearch インストール時のみ利用可能)
関連記事を表示するにはここからMTRelatedEntriesタグを使用します。
ブログ記事のテンプレート内に以下のように記述することで該当記事と同じタグを設定されたエントリーが関連記事として 表示されます。
<ul> <MTRelatedEntries lastn="n"> <li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></li> </MTRelatedEntries> </ul>
nには任意の表示件数を記述します。ちなみに以下のオプションで関連度の計算方法を設定できます。
weight=”constant”: 関連するタグの個数が多いエントリーからリスト。
weight=”idf”:出現頻度の低いタグを共有するエントリーの優先順位が上がります。
なにも記述しなければconstantになります。
ここまではスムーズに実装できたのですが、該当記事が0件の時に非表示にしようと思ったらここで
大苦戦。MTRelatedEntriesの数を取得できればと思ったんですが見当たらず。。
結局ここでMTSetVar(Block)/MTIfタグを駆使した方法に方向転換。
こちらの記事を参考にさせてもらいました。
ちなみにこちらPowerCMSをリリースしているアルファサードの野田さんのブログでしたね。
以下のコードでタグからの関連記事表示と関連記事が0件の時に非表示のどちらも実現できました。
<MTEntryIfTagged> <MTSetVarBlock name="entrytags"> <MTEntryTags glue=" OR "> <$MTTagName$> </MTEntryTags> </MTSetVarBlock> <MTSetVarBlock name="thisid"><MTEntryID></MTSetVarBlock> <MTSetVar name="match" value="0"> <!--←当該エントリーがマッチしたかどうか--> <MTEntries tag="$entrytags" lastn="11"> <!--←10件でなく11件にしておく--> <MTSetVarBlock name="eid"><MTEntryID></MTSetVarBlock> <MTSetVarBlock name="entryCount"><MTEntriesCount></MTSetVarBlock> <!--←何件マッチしたか--> <MTIf name="entryCount" gt="1"> <!--↑1件以上マッチしたら出力 / 1件だったら当該エントリのみと判断できる--> <MTEntriesHeader> <ul> </MTEntriesHeader> <MTUnless name=" last "> <!--←ループの最後でなければ--> <MTUnless name="eid" eq="$thisid"> <li><a href="<MTEntryPermalink>"><MTEntryTitle></a></li> <MTElse> <MTSetVar name="match" value="1"> <!--←当該エントリーがマッチしたことを覚えておく!--> </MTElse> </MTUnless> <MTElse> <!--←ループの最後ならば--> <MTIf name="match"> <!--←当該エントリと既に一致していた場合は11件目を表示--> <li><a href="<MTEntryPermalink>"><MTEntryTitle></a></li> <MTElse> <MTIf name=" counter " ne="11"> <!--←11件に満たない場合も無条件に表示--> <li><a href="<MTEntryPermalink>"><MTEntryTitle></a></li> </MTIf> </MTElse> </MTIf> </MTElse> </MTUnless> <MTEntriesFooter> </ul> </MTEntriesFooter> </MTIf> </MTEntries> </MTEntryIfTagged>
読めば納得ですが、ここまでは思いつきませんでした。 このページ下部の関連記事もこちらで実現しています。