WordPress Popular Posts 表示されないを解決する

前記事で WordPress のプラグイン WordPress Popular Posts(WPP) が正しく表示されない記事を書き、解消したと思ったのですがダメでした。ですので WP Fastest Cache との関連やWPP自体のキャッシュについて調べてみました。



WP Fastest Cache と WPPのAJAX化の関連

WP Fastest Cache と WPPのAJAX化の関連の結論は、WPPのAJAX化の設定によって WP Fastest Cache のキャッシュデータにWPPのデータが保存されるかどうかが変わるということです。

WP Fastest Cache はリクエストされたページ(または先読み)を htmlファイルにして /wp-content/cache/all 以下に保存します。ですので、 WPPのAJAX化が

  • 無効 …… WPPデータも html化されて保存され、そのキャッシュデータが表示される
  • 有効 …… WPPデータのキャッシュはされず、AJAXでリアルタイムのWPPデータが表示される

ということになります。

ただし、これも設定のタイミングにより、AJAX化の設定を変更しても、その時点で WP Fastest Cache のキャッシュがクリアされていなければ、そのキャッシュ内にWPPデータが保存されているかどうかにより表示データが変わるということになり、これによりトラブルの原因が特定できなくなっていると思われます。

ですので、AJAX化の設定を変更する場合は、まず WP Fastest Cache のキャッシュを削除してから変更する必要があります。


WPPのその項目の説明には

もし WP Super Cache のようなキャッシュプラグインを利用している場合、この機能を有効にすると、キャッシュ済みのデータの人気のある投稿リストとなります。

とありますが、有効と無効が逆じゃないかと思うのですがどうなんでしょう? WP Super Cache と WP Fastest Cache とは違うのでしょうか。とにかく保存されるキャッシュを調べたところこの結果でした。


WPPのキャッシュとは?

WPPのツール(ツールというより設定)に「データキャッシュ」という設定項目があります。


また、そのページの一番下に「キャッシュを空にする」「すべてのデータを削除する」というボタンがあります。


どちらも「キャッシュ」という言葉を使っていますが、これはまったく違うものです。設定項目の「データキャッシュ」は表示する場合にキャッシュデータ(データの場所は後述)を使うかどうかであり、「キャッシュを空にする」は下に説明するデータベースのひとつを空にするかどうかです。


WPPは、データベースに「wp_popularpostsdata」「wp_popularpostssummary」「wp_popularpoststransients」の3つのテーブルを持っており、「...data」には記事IDごとにアクセス数を加算していくデータを保存し(下の画像)、「...summary」には1アクセスごとに1レコードが保存されます(下の下の画像)。


ボタンの「キャッシュを空にする」をクリックしますとこの内の「...summary」テーブルが空になります。また、「すべてのデータを削除する」をクリックしますと2つのテーブルを空にします。


WPPは、この2つのテーブル(のどちらかからはまだ調査中)からアクセス数の多いランキングデータを作成し表示します。この2つのテーブルはどちらもアクセスがあれば常に保存します。ですので、設定項目の「データキャッシュ」とこの2つのテーブルとは関係がありません。


WPPのデータキャッシュ

WPPの設定項目の「データキャッシュ」を「キャッシュする」に設定しますと、それまで空だったテーブル「wp_popularpoststransients」にデータが保存されます。


このデータは WordPress に標準で導入されている Transients API というキャッシュシステムのデータへのアクセスキーで、実際のデータはデータベースの wp_options に保存されます。


ですので、WPPの設定項目の「データキャッシュ」を「キャッシュする」に設定しますと、wp_popularpoststransients からキーを読み出し、そのキーから wp_options のキャッシュデータを読みにいくとともに、wp_popularpoststransients にアクセスのあった時間を保存します。

「キャッシュする」に設定しますとその下に「キャッシュ更新間隔」が現れますが、その設定時間内であればキャッシュデータを表示するということになります。


まとめ

現時点でわかっていることは以上です。

ですので、WPPと WP Fastest Cache を併用する場合の推奨設定としては、まず WP Fastest Cache のキャッシュデータを削除し、そのうえで、WPPのAJAX化を有効にするべきです。

そして、WPPの設定項目の「データキャッシュ」は、その上で自サイトのアクセス数をみてどうするか判断すればいいと思います。たとえば、10分間に数アカウント程度でその間WPPの表示が同じでいいと考えるのであれば10分に設定すればいいということになります。

WordPress Popular Posts のトラブル、これで解決です(だと思います)。