WordPress popular posts ページビューが記録されない問題を解決する
SWELLには、PV数カウントの機能があり、ウィジェットでランキングの表示もできます。
でも、SWELLのPV数カウントは機能的にはオマケ程度です。
それを置き換えるプラグインとして、Wordpress popular postsがあります。
SWELLとは関係ないと思いますが、SWELLのサイトでWordpress popular postsを導入した際に、訪問者の記録がされない問題がありました。
最終的に解決するまでに、やったことをこの記事で記録しておきます。
問題:Wordpress popular postsでPVが記録されない
WordPress popular postsは有効化するだけで、PV数を記録してくれます。
しかし、今回のサイトではPV数が全く記録されませんでした。
データの閲覧を記録する対象者は『訪問者のみ』の設定になっていました。
その項目を全員にするとPV数が記録されます。
WordPress popular postsが正常に動いているかの確認
WordPress popular postsが訪問者を記録する仕組みはrest APIを使用します。
記録されない場合は、rest APIが正常に動いていない可能性が高くなります。
特に、管理画面にログインしている時には記録される場合は、非ログイン時には何らかのプラグインによってrest APIが正常に動いていない可能性が考えられます。
確認方法
ブラウザのURL部分に、以下のように入力してレスポンスが返ってくるか確認します。
https://example.com/wp-json/wordpress-popular-posts/v1/popular-posts
正常に動作している場合
文字列が大量に表示されれば、正常に動いています。
正常に動作していない場合
1行だけ表示される場合は、正常に動いていません。
ブラウザの検証ツールのコンソールにrest APIのエラーが出ていないか確認しましょう。
WordPressのサイトヘルスステータスを確認する
rest APIがらみの問題が起きていないか確認する場合は、ダッシュボードのサイトヘルスステータスを確認します。
rest API関係の問題がレポートされていなければ、とりあえず問題ありません。
どうして記録されないのか原因不明のため更に調査
サイトヘルスステータスも問題なく、rest APIのレスポンスがなにも返ってこない、検証ツールのコンソールにエラーも無かった。
原因がわからない状態です。
念のためプラグインを全て無効化
WordPress popular posts以外のプラグインを全てOFFにします。
結果に違いはありませんでした。
キャッシュの影響を無くすためキャッシュをクリア
ブラウザキャッシュの影響を無くすためキャッシュをクリアしてみました。
結果に違いはありませんでした。
WordPress popular postsの設定を変更してみる
データの閲覧を記録する対象者は『訪問者のみ』から『全員』、その逆などに変更してみる。
その後、以下のrest APIのチェックで結果が返ってくるようになりました。
https://example.com/wp-json/wordpress-popular-posts/v1/popular-posts
最終的な原因はWordpress popular postsのカスタマイズに起因
rest APIのチェックで結果が返ってくるようになっても訪問者のカウントはされない状況でした。
その代わり、ページ読み込み時にWordpress popular postsのrest APIがエラーになっていました。
この結果から、rest APIが正しく動作しないように何かが影響しているので、もう一度すべてのプラグインを無効化してみました。
訪問者のカウントが正常に動くようになりました。
原因は、特定のIPを除外してwordpress popular postのPV数を記録するカスタマイズのコードが古かったことでした。
<?php
add_action('wpp_pre_update_views', function($post_ID, $views){
if($_SERVER['REMOTE_ADDR']=="143.177.xxx.xxx"){
return new \WP_REST_Response($response, 201); // これが原因
}
}10,2);
この記事のコードは正しいです。
正しいコードに修正したことで、Wordpress popular postsが正常に動くようになりました。
まとめ
第一段階として、rest APIのレスポンスが返ってこない問題があり、
https://example.com/wp-json/wordpress-popular-posts/v1/popular-posts
それが返ってきたら、Wordpress popular postsのrest APIのエラーが検証ツールのコンソールに出るようになりました。
原因は、カスタマイズコードが間違っていただけなのですが、第一段階のrest APIのレスポンスが返ってこないところで訳が分からなくなってしまい、解決までに時間がかかりました。
rest API周りは変なエラーが出るとなかなか収束しないイメージがありますが、個人的にはキャッシュの影響があったのかな?と思っています。
もし、Wordpress popular postsが訪問者を記録しない場合は、rest APIのレスポンスが返ってくるまでしつこく探求しましょう。
コメント