スマホとタブレットを正確に判定する方法【PHP】

WordPressのwp_is_mobile()は「スマホ・タブレット」をまとめて判定する仕様のため、スマホとタブレットを区別したい場合は、別の方法が必要になります。ここでは考え方と、今おすすめの実装方法を紹介します。

考え方: User-Agent文字列から端末を推測する

ブラウザが送ってくる「User-Agent」という文字列には、端末の種類を示すキーワード(iPhone、Androidなど)が含まれています。この文字列を正規表現でチェックし、スマホ特有のキーワードが含まれていれば「スマホ」、含まれていなければ「タブレット・PC」と判定する、というのが基本の考え方です。

function my_is_smartphone() {
    $useragents = array(
        'iPhone', 'iPod',
        '^(?=.*Android)(?=.*Mobile)', // スマホ版Android
    );
    $pattern = '/'.implode('|', $useragents).'/i';
    return preg_match($pattern, $_SERVER['HTTP_USER_AGENT']);
}
⚠️ 自分でリストを作ると、すぐ古くなってしまう

この方法の弱点は、新しい端末・新しいブラウザが出るたびに、自分でリストを更新し続けなければならないことです。以前この記事で紹介していたリストには「BlackBerry」「webOS」といった、今ではほぼ使われていない端末のキーワードが並んでいました。逆に言えば、今のリストも数年後には同じように古くなります。よほど特殊な要件がない限り、次に紹介する方法を使う方が現実的です。

今のおすすめ: Mobile Detectライブラリを使う

端末判定のリストを自分でメンテナンスし続ける代わりに、「Mobile Detect」という専用ライブラリに判定を任せてしまうのが今の現実的な選択肢です。継続的にメンテナンスされており(2026年8月にも更新確認済み)、判定精度も自作のリストより高くなります。

composer require mobiledetect/mobiledetectlib

導入後は、isMobile()isTablet()という2つのメソッドで、スマホとタブレットをそれぞれ個別に判定できます。

require_once( get_template_directory() . '/vendor/autoload.php' );

$detect = new Mobile_Detect;

if ( $detect->isTablet() ) {
    // タブレットの時
} elseif ( $detect->isMobile() ) {
    // スマホの時(タブレットは含まない)
} else {
    // PCの時
}

isMobile()はスマホ・タブレット両方でtrueになる仕様なので、タブレットの判定(isTablet)を先に書くのがポイントです。この順番を逆にすると、タブレットが常に「スマホ」の分岐に入ってしまいます。

💡 どちらの記事(wp_is_mobile / Mobile Detect)を使うべきか

「スマホの表示件数を減らす」のようにスマホ・タブレットをまとめて1つの条件として扱えば十分な場合は、WordPress標準のwp_is_mobile()で足ります(PCとスマホで投稿一覧の表示件数を変える方法)。一方、タブレットだけは別扱いにしたいなど、より細かく端末を分けたい場合に、今回のMobile Detectを検討してください。用途によって使い分けるのがポイントです。

まとめ

  • User-Agent文字列から端末を推測する自作関数も作れるが、リストを継続的に更新する手間がかかる
  • 今は継続的にメンテナンスされている「Mobile Detect」ライブラリを使うのが現実的
  • isTablet()を先に判定しないと、タブレットが常にスマホ扱いになってしまう点に注意
  • スマホ・タブレットをまとめて扱うだけならwp_is_mobile()で十分。細かく分けたい時だけMobile Detectを検討する

1 COMMENT

現在コメントは受け付けておりません。