SWELLの人気記事ウィジェットは使いにくいので、代替機能としてWordpress Popular Postsプラグインの導入がおススメです。

最近、Wordpress Popular Postsがバージョンアップしまして、ショートコードもAjaxが有効になるようになりました。
WordPress Popular PostsのAjax機能はデフォルトで有効になっていますので、この変更の影響でショートコードを使っていた人のサイトはAjax経由で読み込まれるようになりました。
Ajax経由でWordPress Popular Posts(WPP)を読み込むと赤い棒しか表示されない原因
Ajax経由でWPPを読み込むと赤い棒しか表示されない時があります。
直接的な原因は、REST API経由でAjaxで読み込むときに403になっているためです。
なぜ、403になってしまうかというと、nonceが期限切れになっているからです。
なぜ、nonceの期限が切れているかというと、nonceの期限は1日しかないのに、そのnonceはjavascript変数として1日以上ページキャッシュされているからです。
Ajax経由でWPPを読み込むと赤い棒しか表示されない時の解決方法
WPPはキャッシュプラグインと併用する場合は、ページキャッシュの有効期限を12時間に設定することが推奨されています。
このようにすることで、nonceのjavascript変数のキャッシュが12時間ごとにクリアされることで問題が無くなります。
キャッシュプラグインにはキャッシュの有効期限を設定する箇所がありますので、有効期限を12時間に設定することが解決策になります。
Lite Speed Cacheの場合は、TTLというのがキャッシュの有効期限になりますので、その数値を秒単位で指定してあげればいいです。
そもそもWPPをAjax経由で読み込む必要があるのか?
キャッシュプラグインを併用してAjax経由で読み込むためには、キャッシュプラグインのTTLを12時間にする必要がありました。
これは何かおかしいと思いませんか?
そもそもAjax経由で読み込む必要性はどこにあるのでしょうか?
Ajax経由で読み込むメリットは、WPPの読み込みをサイトの表示と非同期にできることです。つまり、サイトの表示の高速化に寄与するわけです。
それ以外のメリットとしては、ページキャッシュプラグインと併用しても、ページキャッシュの影響を受けずに常に最新の情報を表示できることです。
しかし、このメリットはnonceの有効期限の制限によって、ページキャッシュプラグインの有効期限に制限がでますので、WPP出力を分単位で更新したい人以外は、逆にデメリットとなります。
そもそも、ページキャッシュはウィジェット出力もキャッシュしますから、Ajax経由で読み込まずにウィジェット出力を更新したいタイミングでページキャッシュをクリアすればいいハズです。
Ajaxを無効化してキャッシュプラグインのTTLをなるべく長くするのが正解
Lite Speed CacheのTTLの初期値は1週間になっています。これだと、Ajaxを無効化したWPPのランキングは1週間更新されなくなります。
Lite Speed Cacheには、特定のウィジェット領域だけキャッシュを分けるESIという仕組みもありますが、ESIはオーバーヘッドが大きいので使わない方が無難です。
WPPのランキングを1日一回更新したいのであれば、ページキャッシュのTTLを1日にしておけばそのタイミングで更新されます。
アクセスが比較的多いサイトであれば、WPPのランキングも変化があるので、TTLは1日ぐらいがいいと思います。
アクセスがほぼ無いようなサイトの場合、TTLは初期状態でもいいと思います。
まとめ
WPPのショートコードを使っている人がWPPのバージョンアップで表示されなくなってしまったという場合、原因はページキャッシュとAjaxの組み合わせが原因です。
ページキャッシュのTTLを12時間にするか、Ajaxを無効化することで解決します。
Ajaxを有効化するメリットがあるのは、1日の中でランキングの更新を常に行いたい人だけです。
1日に一回更新すればいいだけであれば、ページキャッシュの有効期間を1日に変えることで解決します。
コメント