WP-PostViewsとWP-SuperCacheを両方使う場合は管理画面のBasic認証は避けた方がいい
2013年01月13日 22時16分
前のPostをしたところ@te2nyan氏にBasic認証がかかっていると指摘を受けた。
WordPressの管理画面からログアウトしてみてアクセスしてみると確かに画面は表示されているのにBasic認証の画面が表示されてる。
こんな画面が数ヶ月前から出ていたのだろうかと思うとショックで頭痛がしてくる。
が頭痛で寝込む前に原因を調べてみた。
これが出力されたhtml。
1 2 3 4 5 6 |
<!-- Start Of Script Generated By WP-PostViews --> <script type="text/javascript"> /* <![CDATA[ */ jQuery.ajax({type:'GET',url:'http://www.crossl.net/blog/wp-admin/admin-ajax.php',data:'postviews_id=1194&action=postviews',cache:false});/* ]]> */ </script> <!-- End Of Script Generated By WP-PostViews --> |
原因はすぐに判明した。
head部分に上のタグが出力されていた。
各投稿の表示件数をカウントするプラグインWP-PostViewsというプラグインがadmin以下のファイルにアクセスしていた為にBasic認証が発生している。
なんでカウントするだけでajaxを使うんだろうか?
そもそもこのプラグインを導入した時点ではこんな事象は発生していない。
バージョンアップで動作を変更したのかな、と思いつつソースを調べてみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
if(defined('WP_CACHE') && WP_CACHE) { echo "\n".'<!-- Start Of Script Generated By WP-PostViews -->'."\n"; wp_print_scripts('jquery'); echo '<script type="text/javascript">'."\n"; echo '/* <![CDATA[ */'."\n"; echo 'jQuery.ajax({type:'GET',url:''.admin_url('admin-ajax.php', (is_ssl() ? 'https' : 'http')).'',data:'postviews_id='.$id.'&action=postviews',cache:false});'; echo '/* ]]> */'."\n"; echo '</script>'."\n"; echo '<!-- End Of Script Generated By WP-PostViews -->'."\n"; } else { if(!update_post_meta($id, 'views', ($post_views+1))) { add_post_meta($id, 'views', 1, true); } } |
WP_CACHEが定義されている場合はajaxのタグを出力するように実装されている。
そういえば1ヶ月前にWP Super Cacheというプラグインを入れて速攻消したのを思い出した。(動的な部分もキャッシュされてしまうのが嫌だったため)
その時、プラグインファイルのアンインストールは行ってもwp-config.phpで定義した定数を削除するのを忘れていたのが今回の原因だった。
WP-CACHEの定義を削除したらBasic認証のダイアログは出なくなった。
キャッシュされた中間ファイルだけで処理されたらカウント処理が出来ないからajaxでカウントする為の処理を呼び出すということを裏でやっている様子。
他のプラグインの為に丁寧な実装だなと思うも、まさか他のプラグインによってプラグインの挙動が変わるなんて思いもしなかったので面食らった理由だった。
管理画面にBasic認証をかけていてキャッシュ系のプラグインを使用している人は本件と同様の症状が発生するので注意が必要になる。