WordPressを高速に動作・表示できるAWSを利用できるAmimoto マネージドプランの環境で、ハマったのでメモしておく。
WordPressにて、PC環境とモバイル環境で、コンテンツを切り替えたいときに、よく使われるのが wp_is_mobile関数だ。
ただ、この関数は、PCかモバイルかの判定のときに、タブレットもモバイル判定する。正直、タブレットはPCと同じ表示にしたいケースの方が多い。
そこで、独自に関数を設定して is_mobile() を作ることが多い。
このケースの時に、Amimoto マネージドプランの環境だと、モバイル判定が出来なくなる。
理由は、CDNのCloudFrontがあるために、ユーザーエージェントの取得がそのままだと失敗するからだ。
実は3日ほど、悩んだ。が、調べてみると、公式のサポート文書があった。(ありがたい)
ということで、Amimoto マネージドプランの環境にて、is_mobile() を使う場合は、サポート文書にあるように、
1. Nginx Mobile Theme プラグイン を導入し有効化
2. 判定処理を functions.php へ追加(wp_is_mobile フィルターフック)
3. 設定後にCloudFront のキャッシュクリア
(4.うまく反映されないときは、ブラウザのキャッシュクリア)
の2つを行う。
スマートフォンのみモバイル判定するフィルターフックは以下の通り。
add_filter( 'wp_is_mobile', function( $is_mobile ) {
false
// CloudFront でスマートフォンと判定された場合、true を返す。
if ( isset($_SERVER['HTTP_CLOUDFRONT_IS_MOBILE_VIEWER']) && "true" === $_SERVER['HTTP_CLOUDFRONT_IS_MOBILE_VIEWER'] ) {
$is_mobile = true;
}
// CloudFront でタブレットと判定された場合、true を返す。
// (タブレットはPCと同じ扱いにしたい場合は、$is_mobile を false にする
if ( isset($_SERVER['HTTP_CLOUDFRONT_IS_TABLET_VIEWER']) && "true" === $_SERVER['HTTP_CLOUDFRONT_IS_TABLET_VIEWER'] ) {
$is_mobile =;
}
return $is_mobile;
});