前回はWordPressのプラグインなどを導入してテーマをSimplicityに変更した後の高速化を行いました。
今回はその高速化の際に出た問題点とその対策方法について紹介したいとおもいます。
WP Super Cacheプラグインとは
WP Super Cacheプラグインとは、WordPressのページを毎回生成するのではなく保存(キャッシュ)して再利用することでWordPressを高速化するプラグインです。
このプラグインについいてはすでに何回か紹介しているので、下記を参照してください。
WordPress Popular Postsプラグインとは
WordPress Popular Postsプラグインとは、アクセスされたページをカウントして、アクセス人気ランキングを生成するプラグインです。
このブログで使用しているテーマSimplicityはWordPress Popular Postsプラグインと連携して、人気のページランキングをウィジェットとして表示することができます。この画面の右下に出ているランキングがWordPress Popular Postsを使ったSimplicityのウィジェットです。
組み合わせたときの問題
さて、このWP Super CacheプラグインとWordPress Popular Postsプラグインを組み合わせて利用した場合の不具合として、WordPress Popular Postsで管理しているアクセス数がほとんど増えないという問題があります。
これは、WP Super Cacheが各ページのデータを保存して再利用しているため、「ページデータの生成」は初回アクセス時にしか行われません。デフォルトではWordPress Popular Postsプラグインはどうもこのページ生成のタイミングでしかアクセス数をカウントしていないため、WP Super Cacheプラグインを使った場合はほとんどアクセス数が増えないのです。
しかし、この問題は古くからある問題で、すでに対策が打たれています。
WordPressの管理画面から「設定」→「WordPress Popular Posts」を選び、「Tools」のタブの中か「らWjaxify widget」を「Enable」に変更します。
これでアクセスがあるごとにAjaxでアクセス数を記録するので、キャッシュを使った場合においてもアクセス数がカウントされます。
さらに残った問題
通常はAjaxify widgetをEnableにするだけで問題は解決するのですが、私の環境ではそれでもアクセス数が増えない問題が残りました。
ただし全くアクセス数が増えないのではなく、私のアクセス数(非ログイン中)だけはカウントされているようでした。
そこでhtmlファイルを確認してみたところ次のような記述を発見しました。
// Create XMLHttpRequest object and set variables var xhr = ( window.XMLHttpRequest ) ? new XMLHttpRequest() : new ActiveXObject( "Microsoft.XMLHTTP" ), url = 'https://scratchpad.jp/wp-admin/admin-ajax.php', params = 'action=update_views_ajax&token=12345678&id=1234'; // Set request method and target URL xhr.open( "POST", url, true ); // Set request header xhr.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" ); // Hook into onreadystatechange xhr.onreadystatechange = function() { if ( 4 == xhr.readyState && 200 == xhr.status ) { if ( window.console && window.console.log ) { window.console.log( xhr.responseText ); } } } // Send request xhr.send( params );
これがAjaxを使ってアクセスがあったことをカウントしている部分だと思うのですが、5行目で設定しているurlが「https」であることが気になります。
というのも、このサイトのサーバ証明書は自分で作成したいわゆるオレオレ証明書です。
そのため、普通のブラウザでhttpsを使ってこのドメイン(scratchpad.jp)にアクセスするとブラウザが証明書エラーを表示して警告するか、httpsでのアクセスを拒否するかのいずれかです。したがって、これではアクセス数がカウントされないのは納得できます。
私のアクセスだけカウントされたのは、私のブラウザにはこのオレオレ証明書をインポートしてあり、警告が出ない状態になっているからでした。
対策
一番の対策はオレオレ証明書の使用は中止して、正しいサーバー証明書を取得することです。
しかしそれはそれなりに手間と時間がかかるので今回はWordPress Popular Postsプラグインのファイルを直接書き換えることにしました(強引ですが・・・)。
WordPress Popular Postsプラグインのディレクトリに「wordpress-popular-posts.php」というファイルがあるので、
echo admin_url('admin-ajax.php')
という部分を探します(2箇所)。そしてこれを
echo admin_url('admin-ajax.php', 'http')
と書き換えます(第二引数に’http’を追加する)。
これでhttpsではなくhttpでadmin-ajax.phpに接続するようになり証明書エラーがなくなるので、アクセス数のカウントが行われるようになるはずです。
まとめ
今回はWP Super CacheプラグインとWordPress Popular Postsプラグインを組み合わせたときに出る不具合について紹介しました。
オレオレ証明書を使っているサイトでは、アクセス数のカウントをajaxで行うようにするほかに、使用するプロトコルをhttpにする必要があります。このような変更をしなくてよいように、いつかは正しいサーバ証明書を入手したいところです。
次回はあと1回だけWordPressネタを紹介したいと思います。
コメント
[…] これは以下のサイトで詳しく解説されています。 WP Super CacheとWordPress Popular Postsプラグイン | メモ置場のブログ […]