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

  • ブックマーク

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 ) {
// 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;
});

Youtube

  • ブックマーク

この記事を書いた人

情報発信ナビゲーター 大東 信仁

情報発信ナビゲーター / 博士課程中退 / ニックネーム : ものくろ / ブロガー / WordPressが得意 / orz レイアウト開発者 / 株式会社 あみだす 代表取締役