タイトルのまんま、「WP Super Cache を使う時は wp_is_mobile 関数は使わないほうがいい」って話です。
この組み合わせは非常に悪くて、多分、意図も簡単に望まないものがキャッシュされてしまうと思います。
この二つをを組み合わせて使うと何が起こるかを簡単に。
例えば、WordPress 標準関数の wp_is_mobile でモバイル向けのコンテンツを出し分けている場合、iPad 等でアクセスされるとこんな事が起こります。
- iPad でアクセスされる
- wp_is_mobile 関数がモバイル向けコンテンツを出力
- WP Super Cache はそれを PC 用としてキャッシュする
- 次回、PC からアクセスすると何やらおかしなものが表示される
これ目の当たりにすると結構悲しくなります。
wp_is_mobile 関数と WP Super Cache のモバイル判定の差分がこの問題を引き起こすようです。
wp_is_mobile 関数 はユーザーエージェントに下記が含まれていたらモバイル扱い。
Mobile, Android, Silk, Kindle, BlackBerry, Opera Mini, Opera Mobi
WP Super Cache はユーザーエージェントに下記が含まれていたらモバイル扱い。
これはプラグインファイル、wp-cache.php の 640 行目付近に書いてある。
'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'
あと、645 行目付近には接続元 ? のような判定情報も。
結局、wp_is_mobile 関数が “Mobile” とざっくり判定してるのが悪い気がするんだけど、アップデートとかあると大変だからどちらのファイルも触るわけにはいかない。
回避方法は下記で前に実験した is_mobile() をテーマ中で使うしかなさそう。
ただ、is_mobile() で関数を作っちゃうと STINGER3 何かを使う時にバッティングしちゃうからそこのところは注意。