iPhoneでパソコンサイトが表示される?UA判定の古いテーマに潜む落とし穴【WordPress救急隊】
最近、「iPhoneでアクセスしたのにパソコンサイトが表示される」という相談が増えています。
実はこの症状、テーマ内に古い is_mobile() 関数が残っていることが原因であるケースが少なくありません。
古いテーマに埋め込まれたUA判定コードとは
WordPressテーマの中には、ユーザーエージェント(UA)をもとにスマホ・PCを判定して、
それぞれ別のデザインを出し分ける仕組みを持つものがあります。
ところが、2010年代のテーマによく見られる以下のようなコードは、 最新のiPhoneでは正常に動作しません。
// ユーザーエージェントを判定するための関数
function is_mobile() {
$match = 0;
$ua = array(
'iPhone',
'iPod',
'Android.*Mobile',
'Windows.*Phone',
'dream',
'CUPCAKE',
'BlackBerry',
'webOS',
'incognito',
'webmate'
);
$pattern = '/' . implode('|', $ua) . '/i';
$match = preg_match($pattern, $_SERVER['HTTP_USER_AGENT']);
if ($match === 1) {
return TRUE;
} else {
return FALSE;
}
}
このコードは一見問題なさそうですが、
iOS17以降(特にiPhone15・16)ではSafariのUA文字列が「Macintosh + Mobile」となり、
上記の条件にマッチせず「PCとして認識」されてしまいます。
Androidでは正常に見えてしまうため、気づきにくい
さらに厄介なのは、制作者自身がAndroid端末を使用している場合です。
Androidでは正しくモバイル判定がされるため、制作者の環境では問題なく表示されます。
その結果、「自分では正常に見えるのに、クライアントやユーザーから“iPhoneでPC表示になっている”と指摘される」
という事態が起きやすくなっています。
このような環境差によるトラブルは、テーマが古いほど発生リスクが高くなります。
最新版に書き換えることで解決
以下のように関数を修正することで、
最新iOSでも確実にモバイル判定が行えるようになります。
// iOS17以降対応版 is_mobile() 関数
function is_mobile() {
$ua = $_SERVER['HTTP_USER_AGENT'];
// 通常のモバイルデバイス
$pattern = '/iPhone|iPod|Android.*Mobile|Windows.*Phone|BlackBerry|BB10|webOS|Silk|Kindle|dream|CUPCAKE|incognito|webmate/i';
if (preg_match($pattern, $ua)) {
return true;
}
// iOS17以降: Macintosh + Mobile のパターン
if (preg_match('/Macintosh/i', $ua) && preg_match('/Mobile/i', $ua)) {
return true;
}
return false;
}
この修正版を functions.php の古い記述と差し替えるだけで、 iPhone15以降でもスマホ版が正しく表示されるようになります。
WordPress救急隊ができること
テーマやプラグインのアップデートが進む中、 こうした「旧テーマ由来のコード不具合」は増加しています。
WordPress救急隊では、
・PHP8対応エラーの修正
・スマホ判定・画像切替の不具合対応
・SiteGuardやセキュリティ設定によるリダイレクトトラブル
・The Events Calendarなどのカスタマイズ調整
など、古いテーマ・複雑なサイト構成でも現場レベルで復旧対応いたします。
まとめ
UA判定のコードは一見地味ですが、テーマ全体の挙動に直結する重要な部分です。
古いテーマをそのまま使い続けている場合、 知らぬ間にiPhoneでPCサイトが表示されるリスクがあります。
しかも、制作者がAndroidで確認している場合は、問題に気づかないことが多いのです。
functions.phpを点検し、必要に応じて修正版へ書き換えることが、 モバイルユーザーの快適な閲覧体験を守る第一歩です。
トラブル対応・調査依頼は「WordPress救急隊」まで。
