WordPress Popular Posts 他のプラグインに変えたほうがいいかも

WordPress Popular Posts 他のプラグインに変えたほうがいいかも

前記事で WordPress のプラグイン WordPress Popular Posts(WPP) が正しく表示されないトラブルに「This is it!」と解決記事を書きましたが、それはそれで間違ってはいませんが完全解消とはなっていませんでした。

WPPとキャッシュプラグイン

私は WP Fastest Cache というキャッシュプラグインを使っています。多分どのキャッシュプラグインも同じだと思いますが、この WP Fastest Cache はリクエストに応じてPHPが吐き出す出力をあらかじめ html にして保存しておき、リクエストがあればその html を返すというプラグインです。

で、一方のWPPはリクエストの多い記事のランキングを出力するプラグインですからできるだけリアルタイム表示が必要になります。

ですので、前記事ではWPPのベストな設定は、

  • まず WP Fastest Cache のキャッシュデータを削除する
  • その上で、WPPのAJAX化を有効にする

ということでした。

その後のトラブル

という設定で様子を見ていたのですが、ある一定期間、2日ほどの印象ですが、その期間を過ぎますと上位にランキングされていた最近の記事が徐々に消えていき、しばらくすると「まだデータがありません」になります。

で、WPPが使用しているデータベースを見ますと、まず、1アクセスごとに1レコードで保存する wp_popularpostssummary では、

6月10日の 20:57 以降データが保存されていません。さらに postid を見てみますと二桁のものが並んでおり、これは少し古い記事であまりアクセスの多くないものです。アクセス数の多い最近の記事は記録されなくなっているということです。表示される結果の印象と合致しています。

なお、赤枠の以外の3行は管理者が確認のために「記録する対象者」を全員にしてアクセスしたものです。

データベースのもうひとつのテーブル wp_popularpostsdata 、こちらは記事IDごとにアクセス数が加算されていくものですが同じ結果です。

考えられることはトークン?

原因はトークンですね。このあたりにきますとなかなか理解が追いつかないのですが、おおよそこういうことかと思います。

WPPはリクエストがありますと下のようなJSONデータをヘッダに埋め込んで返します。

{"sampling_active":0,"sampling_rate":100,"ajax_url":"https:\/\/movieimpressions.com\/wp-json\/wordpress-popular-posts\/v1\/popular-posts","api_url":"https:\/\/movieimpressions.com\/wp-json\/wordpress-popular-posts","ID":4468,"token":"0c29019bf8","lang":0,"debug":0}

ブラウザは、このJSONデータを Javascript で読み込んで記事IDやトークンを ajax_url に返します。そこでトークンの照合をしているんじゃないかと思います。

で、キャッシュプラグインを有効にしていますと埋め込まれたトークンは更新されないわけですから、ある一定時間を過ぎますとカウントされなくなるということかもしれません。

ということで、これ以上深入りする時間もありませんので、とりあえずは WP Fastest Cache のキャッシュを毎日 04:00 時にクリアするように設定して様子をみようと思います。

アナリティクスのデータを使えないか

今回いろいろ調べてみましたら、アナリティクスのデータを使って人気記事を表示することができるようでしたので、このWPPをあきらめてその方法を調べてみようと思います。