iPhoneでWordPressのwp_is_mobile()が効かない理由

モバイルアクセスかどうかを判定するWordPress関数 wp_is_mobile() が、いつからか iPhone をモバイルと判定してくれなくなりました。

なぜだろう?と思って、

echo $_SERVER['HTTP_USER_AGENT'];

でユーザーエージェントを画面に出力させてiPhoneでアクセスしたところ、

モバイル用サイトの表示を有効にしている場合は

Mozilla/5.0 (iPhone; CPU iPhone OS 13_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecke) Version/13.0.4 Mobile/15E148 Safari/604.1

と表示され、

デスクトップ用Webサイトの表示をONにした場合は

Mozilla/5.0 (Machintosh; Intel Mac OS x 10_15) AppleWebKit/605.1.15 (KHTML, like Gecke) Version/13.0.4 Safari/605.1.15

と表示されました。

同じiPhoneでも、モバイル用とデスクトップ用のどちらでアクセスするかによって文字列が違います。

一方、WordPressの公式ドキュメントで wp_is_mobile() 関数の定義を確認したところ、

wp_is_mobile()の定義
添付のとおり、

ユーザーエージェントに ‘Mobile’ という文字が含まれていれば多くのモバイルデバイス(全てのiPhone, iPadなど)を示すものと判断していることがわかります。

以前はiPhoneのユーザーエージェントに’Mobile’ が含まれていたので正しい判定結果が得られたのでしょうけれど、

現在は違います。

どうやら iOS13 ,iPadOS が登場したことで、デスクトップ用Webサイトの表示をONにしたiPhoneでは wp_is_mobile() が False を返すというのが原因のようです。

ということで、iPhoneでアクセスしたのにまるでPCでアクセスしたかのような表示や動作になってしまうことがあるのは、

WordPressのバグでもなく、当初のサイト制作者のミスでもなく、

iOSのバージョンアップによる仕様変更が原因ということです。