Simplicityでより精度の高い関連記事を表示するカスタマイズ方法

Simplicityの本文下には、関連記事が表示されています。

Simplicityのデフォルトの関連記事

ただ、この関連記事は、アルゴリズム的に言えば、以下のような挙動になっています。

同一のカテゴリの中から指定した数だけランダムで関連記事を表示する

これだと、「同一のカテゴリー」という関連性はあるものの、それ以外はランダム表示です。表示される記事の関連性は、データに基づいておらず、偶然に頼る部分が大きいです。

ただ、先日とあるプラグインを使用して、精度の高い関連記事を表示できるようになったので、そのやり方を紹介したいと思います。

スポンサーリンク

使用するプラグイン

関連記事の関連性を高めるために使用するプラグインは、TechNoteさんが開発されたCFilteringというプラグインです。

WordPressの公式ディレクトリにも掲載されています。

Recommendation plugin using collaborative filtering

CFilteringプラグインとは

このプラグイン使用することで、「ユーザーの閲覧行動」から、統計的に関連性の高い記事を算出することができます。

例えば、Amazonなどで商品を買うと、「この商品を買った人はこんな商品も買っています」と出ますよね?

この商品を買った人はこんな商品も買っています

こういった推薦商品と似たような感じで、ブログでも「この記事を読んでいる人は、こんな記事も読んでいます」という機能を実現することができます。

CFilteringプラグインを導入すると

CFilteringをインストールすると、投稿一覧ページなどに「レコメンデーション」項目が追加され「表示」ボタンが表示されます。

レコメンデーション項目が表示される

例えば、Simplicityの外部リンクブログカードの設定方法という記事のレコメンデーションを見てみるとフロンカード関係の記事が上位に出てきます。

Simplicityの外部リンクブログカードの設定方法という記事のレコメンデーション

こういった、閲覧ユーザー履歴の統計結果から算出された関連記事を表示させることで、Simplicityの関連記事をより関連性の高いものに紐付けることができます。

CFilteringを利用するには、PHPのバージョンが5.4以上である必要があります。サーバーの設定などから確認してください。
CFilteringをインストールしてしばらく待たないと閲覧履歴データが貯まりません。ですので、インストール後暫くの間は、データがたまるのを待つ必要があります。

Simplicityで関連性の高い関連記事を表示する方法

CFilteringの解説ページにも、やり方は書かれているのですが、一応方法も説明しておきます。

「統計に基づいた関連性の高い関連記事表示」と聞くと、なんだか難しそうに見えますが、やることといえば以下の2点で非常に簡単です。

  1. CFilteringのインストール
  2. カスタマイズ用のコードをfunctions.phpにコピペ(Simplicity2.3.0d以降は不要)

僕が行った、作業時間といえば、1分もかかっていないかも。

CFilteringのインストール

まずは、プラグインをインストールします。

プラグインのインストールは、Wordpress管理画面から「プラグイン → 新規追加」を選択します。

プラグインから新規追加

「プラグインを追加」画面で検索フォームに「CFiltering」と入力するとCFilteringプラグインが表示されるので「今すぐインストール」ボタンを押してください。

プラグインを今すぐインストール

これでインストールは完了です。

Simplicity2.3.0d以降であれば、CFilteringプラグインをインストールさえすれば、「精度高い関連記事」機能が適用されるようになっています。以下のコードのコピペ作業は不要です。

カスタマイズ用のコードをfunctions.phpにコピペ

Simplicity2.3.0d未満であれば、以下の作業が必要です。

Simplicity2.3.0d以上を使用しつつ下記コードを追加している場合はfunctions.phpから削除をお勧めします(そのままでもエラーなどは出ないとは思いますが)。

あとは、Simplicityの子テーマのfunctions.phpに以下のコードをコピペします。

add_action('get_template_part_related-entries', function () {
  if (function_exists('cf_get_posts')) {
    $posts = cf_get_posts();
    if (count($posts) > 0) {
      $pre_get_posts = function ($query) use (&$pre_get_posts, $posts) {
        $num = $query->query_vars['posts_per_page'];
        $query->set('p', -1);
        $the_posts = function () use (&$the_posts, $posts, $num) {
          remove_action('the_posts', $the_posts);
          return array_slice($posts, 0, $num);
        };
        add_action('the_posts', $the_posts);
        remove_action('pre_get_posts', $pre_get_posts);
      };
      add_action('pre_get_posts', $pre_get_posts);
      return;
    }
  }
});
上記コードはPHP5.4以上でないとエラーが出ます。PHP5.4未満で利用するには、無名関数は使わず関数名を定義してアクションをフックに指定してください。
親テーマのみで利用している場合は親テーマのfunctions.phpにコピペしてください。
CFilteringのデータが少なくて関連記事情報が取得できない場合は、Simplicityデフォルト動作の「同じカテゴリー内でランダム取得」が行われます。

その他の詳しい設定方法や、仕様などについては以下を参照してください。

動作確認

あとは動作確認です。

ただ動作確認を行うには、CFilteringのデータが貯まっていない場合は、数日~数週間待ってデータを蓄積させる必要があるかと思います。

まずは、任意の記事のレコメンデーション表示ボタンを押します。

レコメンデーション表示ボタン

すると、データが貯まっていれば以下のように関連度が高い順に一覧表示されます。

関連度が高い順に表示される

あとは、実際のページもブラウザで表示し、関連記事が同じ順番になっていればカスタマイズ成功です。

関連記事が同じ順番になっているか

詳しく見てみると、表示したページはSimplicityの基本的な文章装飾スタイルを使う方法まとめなんですが、関連記事も「文章装飾」系の記事が、ちゃんと上位に表示されています。素晴らしすぎる。

もう一つSimplicity2.2.9のバージョンアップ記事の関連記事を見てみると以下。

Simplicity2.2.9の関連記事

Simplicity2.2.9の直近のバージョンアップ記事が表示されていたり、アップデート方法の記事が表示されています。おそらく、新しいバージョンが出たらアップデート方法を知りたくなるので、このような関連記事表示になっているのでしょう。

かなり関連度が高い記事が表示されているのがわかります。

CFilteringを使用して関連記事を表示すれば、カテゴリにとらわれることもなく、別カテゴリーであっても関連性が高ければ記事が表示されます。

まとめ

というわけで、こんな感じで結構簡単に関連度の高い関連記事を表示させることができます。

今回のカスタマイズを行わなくても、そういったプラグインを使えば、関連の高い関連記事は表示させることができると思います。

けれど、今回の方法の良いところは、「Simplicity関連記事のデザインはそのままに、表示される記事がより関連度の高いものになる」ということです。

例えば、関連記事表示プラグインWordPress Related Postsの場合は、本文下に追加する形で関連記事が表示されます。けれど、今回の方法を使えば、「Simplicityデザインに親和性も高く精度の高い関連記事を表示する」ということができます。

もし、Simplicityを使っていて「もっと関連性の高い関連記事を表示したいな…」とお考えの場合は、TechNoteさん作成のCFilteringを是非試してみてください。

GitHubリポジトリ

不具合等ありましたらGitHubに、ご連絡いただけると幸いです。

yhira/simplicity2

スポンサーリンク
アドセンス(大)
アドセンス(大)

フォローする

スポンサーリンク
アドセンス(大)

コメント

  1. 電車猫 より:

    わいひらさん、はじめまして
    このプラグインを使用しようとしたところ、2018年1月26日にプラグイン公開をやめてしまいダウンロードできなくなってしまいました。
    代替の方法があればまた記事にしていただきたいです。