CFiltering

cfiltering3

このプラグインは「この記事を読んだ方はこんな記事も読んでいます」の機能を実現するためのものです。

有効化することで関連記事を取得するいくつかの関数を使用できるようになります。

テーマのfunctions.phpや自作のプラグイン等で使用することで、関連記事を表示することでできるようになります。

また投稿一覧から同時に読まれやすい記事を見ることができるようになります。

screenshot-2

動作条件

必須条件

  • PHP5.4以上
  • WordPress3.9.13以上

PHPの方はPHP5.4以上でしか使用できない機能を使用しているため、絶対に必要な条件です。

WordPressの方は確認した最小のバージョンを示しているため、もっと低いバージョンでも動作する可能性はあります。

PHP5.4未満の環境ではプラグインを有効化しても何も起きません。

確認環境

  • PHP5.6.24、WordPress4.6.1、Nginx+PHP-FPM、マルチサイト
  • PHP5.6.10、WordPress3.9.14、Apache
  • PHP5.6.10、WordPress4.6.1、Apache
  • PHP5.4.45、WordPress4.6.1、Apache
  • PHP7.0.10、WordPress4.6.1、Apache
  • PHP5.2.17、WordPress4.6.1、Apache(機能はしないがエラーが発生しないことを確認)
  • PHP5.3.29、WordPress4.6.1、Apache(機能はしないがエラーが発生しないことを確認)

仕様及び特徴

Jaccard係数による協調フィルタリングを使用したレコメンデーションプラグインです。

ユーザーの記事の閲覧行動からオススメの記事を提案します。

なのでデータが少ない場合には精度が悪い、もしくはそもそも提案する記事がないということが起こります。

したがって以下の様なデータ数によらない記事の提案方法を同時に行うことを推奨します。

  • 記事の類似度
  • 新着順
  • ランダム

Jaccard係数の計算は時間がかかるため、アクセス履歴の保存と計算は別に行なっています。

計算を行う頻度やログインユーザーを除外するかどうかなどの設定が用意されています。

手順

プラグインをインストール

公式ディレクトリに登録してあるため、プラグインの新着追加画面から検索できます。

「cfiltering」と検索するとヒットします。

cfiltering4

「今すぐインストール」ボタンでインストールし、有効化します。

cfiltering5

関数の使用

プラグインが有効化されると以下の関数が使用できるようになります。

  • cf_get_post_id
    • 関連記事の記事IDの配列を取得します。
    • 引数
      • post_id = null
        • 取得したい記事IDを指定します。
        • nullで現在の記事IDが自動的に指定されます。
      • threshold = null
        • 関連度の閾値を指定します。
        • より高い値を指定するとより高い関連度のもののみが取得されます。
        • 指定できる範囲は0〜1です。
  • cf_get_posts
    • 関連記事の配列を取得します。
    • 引数
      • cf_get_post_idと同様

関数の使用例(Simplicity2)

Simplicity2の関連記事を置き換えるには、以下のコードを子テーマのfunctions.phpなどに記述します。

データが少なくて関連記事が取得できなかった場合は、デフォルトの動作の「同じカテゴリのランダムな記事」が表示されます。

以下のページでもカスタマイズ方法を紹介しています。

【WordPress】統計学的手法で「この記事を読んだ人は、こちらの記事も読んでいます」を実装する
「この記事を読んだ人は、こちらの記事も読んでいます」を実現するプラグインを作成しました。 どんなプラグイン? ECサイトによくある「この商品を買った人は、こちらの商品も買っています」のよう...

同時に読まれている記事を確認する

投稿一覧に「レコメンデーション」の項目が追加されます。

cfiltering8

「表示」ボタンを押すと同時に読まれている記事を確認することができます。

cfiltering9

下の「データ数」が赤い場合はデータ数が少ないため、関連記事の取得はできません。

cfiltering10

上記画像では閾値は10ですが、下の設定値の「結果取得に必要な最小データ数。関数に引数で指定されなかった時に使用されます。 」の項目で変更することが可能です。

より正確なものを求めるのであればこの数を大きくします。

設定値

管理画面のCFilteringメニューからこのプラグインの設定を変えることができます。

cfiltering2

  • ログインしているユーザー除外するかどうか [default = true]
  • アクセスしたときにクッキーの有効期限を更新するかどうか [default = true]
  • ユーザーのクッキー有効期限 [default = 3600, min = 0]
  • サンプリングレート [default = -1, min = 0, max = 1]
    • アクセスデータを保存するユーザーの割合を指定します。
    • デフォルトの場合は自動で計算します。
  • クッキーのデータを検証するかどうか [default = true]
    • クッキーのデータが改ざんされていないかのチェックを行います。
    • 速度を求める場合はfalseにします。
  • nonceチェックをするかどうか [default = true]
    • CSRFを防ぐためにnonceチェックを行います。
    • 速度を求める場合はfalseにします。
  • 計算の間隔 [default = 600, min = 60]
  • 計算のタイムアウト [default = 600, min = 60]
  • 計算プロセスのログをとるかどうか [default = false]
  • アクセス履歴の削除の間隔 [default = 3600, min = 60]
  • アクセス履歴の削除プロセスのログをとるかどうか [default = false]
  • アクセス履歴の有効期限 [default = 86400, min = 60]
  • ログの表示行数 [default = 100, min = 0]
  • 保存する計算結果の最大数 [default = 20, min = 1]
  • アップデートをチェックするかどうか [default = true]
  • このプラグインで生成されたJavaScriptをMinifyするかどうか [default = true]
    • JSMinを使用してJavaScriptを縮小します。
    • 別のプラグインで縮小している場合はfalseにします。
  • Jaccard係数の閾値。関数に引数で指定されなかった時に使用されます。 [default = 1, min = 0, max = 1]
  • 結果取得に必要な最小データ数。関数に引数で指定されなかった時に使用されます。 [default = 10, min = 0]
  • 1回あたりの最大計算数 [default = 10000, min = 10]
  • 有効な投稿タイプ。複数ある場合はコンマで区切って入力します。 [default = post]
  • 結果を表示するボタンを設置するかどうか [default = true]
  • フロントでadmin-ajax.phpを使用するかどうか [default = true]
    • Ajax処理にadmin-ajax.phpを使用するかどうか
    • 詳細
  • nonceチェックをせずにAjaxアクセスする場合にリファラをチェックするかどうか [default = true]
  • テストボタンを表示するかどうか [default = true]
  • ページキャッシュを考慮するかどうか [default = true]
    • ページキャッシュを行っていない、もしくはページキャッシュの有効期限が一日未満の場合は「false」にすることで高速化できます。
  • 開発版のアップデートをチェックするかどうか [default = false]

FAQ

Q. 関連記事に利用するコードを追加したが、関連記事の並び順がランダムのままで変わらない

A. しばらくしてデータがたまるまではランダムになります。

具体的には、「ダッシュボード」の設定の「結果取得に必要な最小データ数。関数に引数で指定されなかった時に使用されます」に設定された数以上たまるまではランダムです。

Q. 関連記事に利用するコードを追加したが、しばらくしても並び順がランダムのままで変わらない

A. ユーザーのアクセスデータが正しく取れていない、または計算プロセスが起動していない可能性があります。

「ダッシュボード」の設定の「計算プロセスのログをとるかどうか」を「true」にして1時間ほど待ってから「ログ」を見ます。

正常に動作している場合

日時 メッセージ
2016-09-27 14:52:02 end calc [elapsed time: 71.413993835449 ms]
2016-09-27 14:52:02 target count: 5
2016-09-27 14:52:02 start calc
2016-09-27 14:32:03 end calc [elapsed time: 30.981063842773 ms]
2016-09-27 14:32:03 target count: 1
2016-09-27 14:32:03 start calc

のように記録されていたら、アクセスデータの取得及び計算プロセス共に正しく動作しています。

しばらく待つと関連記事が正しく表示されます。

計算プロセスが動いていない場合

「項目がありません。」が表示されている場合は、計算プロセスが正しく動作していません。

計算プロセスはWordPressのクーロン機能を使用しています。

WordPressのクーロン機能が正しく動作することを確認して下さい。

アクセスデータが取得できていない場合

「target count:」に0しか記録されていない場合は、アクセスデータが取れていない可能性があります。

Chromeのデベロッパーツール(F12)でNetworkを確認します。

admin-ajax.phpが赤くなっていないか確認します。

ajax-error

赤くなっている場合は正しくユーザーのアクセスデータが取得できていません。

バージョン1.2.7以下の場合はCloudFrontなどプロキシサーバーを挟んでいる場合にエラーが発生します。

その場合はまずはバージョンアップを行って下さい。

それでも直らない場合は、ダッシュボードの設定の「フロントでadmin-ajax.phpを使用するかどうか」を「false」に設定してください。

今度はデベロッパーツールで「ajax」を確認します。

ajax-error2

それでも直らない場合は、ダッシュボードの設定の「nonceチェックをせずにAjaxアクセスする場合にリファラをチェックするかどうか」を「false」に設定して下さい。

【CFiltering】このサーバでは CFiltering は正しく動作しません。
動作テストではいくつかの設定で実際にアクセス履歴を取得する動作のテストを行います。 用意された全ての設定で上手く行かなかった場合、以下のように 「このサーバでは CFiltering は正...

アルゴリズムの詳細

データマイニングでよく用いられる手法の中で、売上ランキングやABC分析、アソシエーション分析、商品別需要予測など、誰が買うかではなく、何をどれくらい買うかの商品分析の手法について詳しく解説します。
Chapter 1. Introduction to Collective Intelligence Netflix is an online DVD rental company that lets people choose movies to be sent to their homes, and makes r...
スポンサーリンク

シェアする

フォローする