WP Super Cache を使って暫く立ちますが、ある条件下で想定していないキャッシュが作成されてしまうという事が起きていました。
簡単にいうと iPhone からアクセスすると何故か PC ページが表示される・・・という具合です。
下記記事でも書きましたが、WP Super Cache と wp_is_mobile() 関数のモバイル判定条件がってことで、wp_is_mobile() を自作関数に置き換える事で解決と思ったのですがこれが甘かった。
当初はどこに問題があるか検討も付きませんでしたが、WP Super Cache のモバイル判定部分を再度よく確認するとこんなエージェントが。
Googlebot-Mobile Nintendo Wii PlayStation Portable
Googlebot-Mobile の存在は知っていたとは言え完全に見落とし。ゲーム機に関しては完全に盲点でした。Google アナリティクスを見たら結構来てるんですねこのアクセス。
頻度は通常のスマートフォンに比べると低いとはいえ、絶妙なタイミングでこいつらが先に変なキャッシュを作っていたという事が原因でした。
と、いうことで自作する関数も WP Super Cache と同じにしないとダメみたいです。ユーザーエージェントの部分を拾ってきてこんな感じに作ってみました。
function is_mobile() { $match = 0; $ua = array( '2.0 MMP', '240x320', '400X240', 'AvantGo', 'BlackBerry', 'Blazer', 'Cellphone', 'Danger', 'DoCoMo', 'Elaine/3.0', 'EudoraWeb', 'Googlebot-Mobile', 'hiptop', 'IEMobile', 'KYOCERA/WX310K', 'LG/U990', 'MIDP-2.', 'MMEF20', 'MOT-V', 'NetFront', 'Newt', 'Nintendo Wii', 'Nitro', 'Nokia', 'Opera Mini', 'Palm', 'PlayStation Portable', 'portalmmm', 'Proxinet', 'ProxiNet', 'SHARP-TQ-GX10', 'SHG-i900', 'Small', 'SonyEricsson', 'Symbian OS', 'SymbianOS', 'TS21i-10', 'UP.Browser', 'UP.Link', 'webOS', 'Windows CE', 'WinWAP', 'YahooSeeker/M1A1-R2D2', 'iPhone', 'iPod', 'Android', 'BlackBerry9530', 'LG-TU915 Obigo', 'LGE VX', 'webOS', 'Nokia5800' ); $pattern = '{' . implode( '|', $ua ) . '}i'; $match = preg_match( $pattern, $_SERVER['HTTP_USER_AGENT'] ); if ( $match === 1 ) { return true; } else { return false; } }
見たことないのも一杯ありますが仕方ありません。本当は iPhone, iPod, Android だけで十分なのですが WP Super Cache のファイルを触るのは気が引けるし、管理画面から除外設定するのもめんどい。
実装はまだですがおおまかな動作テストで問題なかったので OK なはず。
ちなみに、アクセスログを漁ったらゲーム関連のユーザーエージェントが結構拾えた。
# Nintendo Mozilla/5.0 (Nintendo WiiU) AppleWebKit/536.28 (KHTML, like Gecko) NX/3.0.3.12.14 NintendoBrowser/3.1.1.9577.JP Mozilla/5.0 (Nintendo 3DS; U; ; ja) Version/1.7567.JP # PlayStation Mozilla/5.0 (PLAYSTATION 3 4.60) AppleWebKit/531.22.8 (KHTML, like Gecko) Mozilla/5.0 (PlayStation Vita 3.18) AppleWebKit/536.26 (KHTML, like Gecko) Silk/3.2 Mozilla/4.0 (PSP (PlayStation Portable); 2.00)
Nintendo は Wii とか WiiU がモバイル扱いなのに DS は PC 扱い。
PlayStation は PSP のみがモバイル扱い。Vita もじゃないの ? って思いますがこんなのに一々対応してたらキリがないよね。
WP Super Cache が中途半端に対応しているのが謎。