Movable Typeで関連記事を表示するプラグイン「SimilarEntries」をランダム表示にする

「SimilarEntries」は、カテゴリー・カスタムフィールド・タグなどが一致している記事を自動表示するMovable Type用プラグインです。

https://github.com/bit-part/mt-plugin-SimilarEntries

こちらの投稿で解説したとおり、関連記事の表示結果は固定順となります。
https://qiita.com/webbingstudio@github/items/588632a5f0bab9cee9b9
しかし、関連記事を導入する背景(サイト内の回遊率を増やす)を考えると、ランダム表示のほうが望ましいです。

この記事では、強制的にランダム表示に変更する方法について説明します。

注意点

かなり暫定的な方法です。このため以下のリスクがあり、公開後に関与できないサイトでは導入をおすすめできないことを、あらかじめご了承ください。

  • すべての表示結果がランダム表示となります。
  • 表示結果の件数がlimitで指定した数値より少ないとランダムになりません(要検証)。
  • プラグインのコアファイルを差し替えるため、バージョンアップ時に、該当ファイルの修正が都度必要となります。

修正方法

以下のディレクトリにある、SimilarEntries.jsをエディタで開いてください。

Movable Typeをインストールしたディレクトリ/mt-static/plugins/SimilarEntries/js/SimilarEntries.js

30行目から60行目に「array.sort」を行っている箇所があるので、コメントアウトで無効化してください。

SimilarEntries_sort.js
array.sort(function(obj1, obj2){
    for (var i = 0, l = sortCondition.length; i < l; i++) {
        var key    = sortCondition[i]['key'];
・・・
        return 0;
    }
});

その箇所に、以下のコードを挿入して上書き保存してください。
関連データが入っている配列を昇順ソートではなく、シャッフルするようになります。

SimilarEntries_shuffle.js
var shuffle = function(arr) {    
    var n = arr.length;
    var temp, i;

    while (n) {
        i = Math.floor(Math.random() * n--);
        temp = arr[n];
        arr[n] = arr[i];
        arr[i] = temp;
    }
    return arr;
};
array = shuffle(array);

参考

配列をシャッフルするロジック
http://javascript.step-learn.com/contents/J061-array-shuffle.html

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.