WP Super CacheとWordPress Popular Postsプラグイン

修理 WordPressのプラグイン
スポンサーリンク

前回はWordPressのプラグインなどを導入してテーマをSimplicityに変更した後の高速化を行いました。

今回はその高速化の際に出た問題点とその対策方法について紹介したいとおもいます。

スポンサーリンク

WP Super Cacheプラグインとは

WP Super Cacheプラグインとは、WordPressのページを毎回生成するのではなく保存(キャッシュ)して再利用することでWordPressを高速化するプラグインです。

WP Super Cache
WP Super Cache
開発者: Automattic
金額: 無料

このプラグインについいてはすでに何回か紹介しているので、下記を参照してください。

WordPress高速化: WP Super Cacheの導入
今回はWordPressの根本的な高速化を図るため、WP Super Cacheというプラグインを導入します。また、WP Super Cacheにあわせてnginxの設定も変更します。
Wordpress高速化: WP Super Cache + RAMディスク
今回は増量されたメモリを活用するためにRAMディスクを導入し、WP Super Cacheプラグインのキャッシュ用ディレクトリとして利用します。RAMディスクはHDDに比べてかなり高速なので、WordPressのパフォーマンスの向上が期待できます。
WordPressのテーマ変更 その5: Simplicityの高速化
今回はテーマをSimplicityに変更した後に適用した高速化手法を紹介します。ほとんどが以前のテーマの設定のまま流用するすることができましたが、CSSとJavaScriptの最適化だけはうまくいきませんでした。ただSimplicityはそのままでも十分早いテーマなので今回の高速化はここで打ち切ることにしました。
スポンサーリンク

WordPress Popular Postsプラグインとは

WordPress Popular Postsプラグインとは、アクセスされたページをカウントして、アクセス人気ランキングを生成するプラグインです。

WordPress Popular Posts
WordPress Popular Posts
開発者: Hector Cabrera
金額: 無料

このブログで使用しているテーマSimplicityはWordPress Popular Postsプラグインと連携して、人気のページランキングをウィジェットとして表示することができます。この画面の右下に出ているランキングがWordPress Popular Postsを使ったSimplicityのウィジェットです。

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」に変更します。

WordPress Popular Postsプラグインの管理画面

これでアクセスがあるごとに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」であることが気になります。

というのも、このサイトのサーバ証明書は自分で作成したいわゆるオレオレ証明書です。

WordPressをDebianにインストール その3: セキュリティの強化
今回はWordPressの管理画面にログインする際にSSLを使えるようにします。SSLを使えるようにするためには自己署名証明書(オレオレ証明書)を作成してセットアップする必要があります。

そのため、普通のブラウザでhttpsを使ってこのドメイン(scratchpad.jp)にアクセスするとブラウザが証明書エラーを表示して警告するか、httpsでのアクセスを拒否するかのいずれかです。したがって、これではアクセス数がカウントされないのは納得できます。

私のアクセスだけカウントされたのは、私のブラウザにはこのオレオレ証明書をインポートしてあり、警告が出ない状態になっているからでした。

ブラウザへのSSL証明書のインポート
今回はオレオレ証明書を使ってhttps接続(SSL)を行っているサイトに接続した際に警告が出ないようにする方法を紹介します。自分で管理しているサーバならばこのような手段で警告が出ないようにしておいた方が何かと操作性がよいので、オレオレ証明書を使っている方はぜひやっておきましょう。

対策

一番の対策はオレオレ証明書の使用は中止して、正しいサーバー証明書を取得することです。

しかしそれはそれなりに手間と時間がかかるので今回は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ネタを紹介したいと思います。

コメント

  1. […] これは以下のサイトで詳しく解説されています。 WP Super CacheとWordPress Popular Postsプラグイン | メモ置場のブログ […]

タイトルとURLをコピーしました