Amimoto(AWSマネージド)is_mobileは一工夫必要

WordPressを高速に動作・表示できるAWSを利用できるAmimoto マネージドプランの環境で、ハマったのでメモしておく。

WordPressにて、PC環境とモバイル環境で、コンテンツを切り替えたいときに、よく使われるのが wp_is_mobile関数だ。

ただ、この関数は、PCかモバイルかの判定のときに、タブレットもモバイル判定する。正直、タブレットはPCと同じ表示にしたいケースの方が多い。

そこで、独自に関数を設定して is_mobile() を作ることが多い。

このケースの時に、Amimoto マネージドプランの環境だと、モバイル判定が出来なくなる。

理由は、CDNのCloudFrontがあるために、ユーザーエージェントの取得がそのままだと失敗するからだ。

実は3日ほど、悩んだ。が、調べてみると、公式のサポート文書があった。(ありがたい)

✓ あわせて読みたい
AMIMOTO サポート

ということで、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 ) {
// 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 =
false;
}
return $is_mobile;
});

この記事を書いた人

大東 信仁

カンパチが好きです。

プロフィールはこちら

10月14日開催 参加者募集中
(画像をタップ→詳細へ)

ミッションナビゲート モニター
(画像をタップ→詳細へ)

広告