WordPressでiPadを除くモバイル端末の検出をする

スマートフォンの普及は予想しましたが 新しく携帯電話を購入しようとすればスマートフォン以外の選択肢は難しくなるキャリア側の 競合間の激しい契約者数獲得の激しい鍔迫り合いから来る焦りとも言うべき施策に 後押しされる状況となる迄は些か想定外でした。 斯くして世の人々がホームページにアクセスするに当たり スマートフォンからのトラフィックが驚くべき勢いで増加しては 最早スマートフォン対策のなされていないホームページは ホームページとは呼べない状況ともなったのです。

iPhone 4 Bumper + Universal Dock w/ DIY Adapter

アクセス端末の検出

ホームページが依拠するインターネットが従来のメディアと大きく異なるのは 従来メディアが基本的に一方通行であるのに対し、 インターネットは双方向性を持つことに有ります。 従って原則としてホームページにアクセスする側は 自らが何者であるかホームページ側に知らせていることになります。

ホームページ側はこの受け取った情報から 相手がパソコンであるのか、携帯電話であるのか、スマートフォンであるのか、タブレットであるのか、 などを判断出来るものとなっています。

ユーザーエージェント

受け取った相手の情報の内にも端末の判断に使えるものが…

スポンサーリンク

ユーザーエージェントUser Agent) です。 インターネットでホームページを表示するには HTTP と呼ばれる約束事に基づいているのですが、 この約束事に添って画面を表示するプログラムのことをユーザーエージェントと言い その代表的なものがインターネットエクスプローラーやクロームなどの Webブラウザ で、其々が独自の名乗りを上げ、携帯やスマートフォンのブラウザも ユーザーエージェントに自らの身分を明かしているのです。

モバイル端末判別プログラム

このユーザーエージェントに含まれる文字を見て その端末がモバイル機器かそうでないかを判別するプログラムを みはら.com さんが2012年9月29日の記事 [み]レスポンシブデザインのWordPressでAdSenseを切り替える方法 に公開しています。 以下に引用しましょう。

function is_mobile(){
  $useragents = array(
    'iPhone', // iPhone
    'iPod', // iPod touch
    'Android', // 1.5+ Android
    'dream', // Pre 1.5 Android
    'CUPCAKE', // 1.5+ Android
    'blackberry9500', // Storm
    'blackberry9530', // Storm
    'blackberry9520', // Storm v2
    'blackberry9550', // Storm v2
    'blackberry9800', // Torch
    'webOS', // Palm Pre Experimental
    'incognito', // Other iPhone browser
    'webmate' // Other iPhone browser
  );
  $pattern = '/'.implode('|', $useragents).'/i';
  return preg_match($pattern, $_SERVER['HTTP_USER_AGENT']);
}

is_mobile() と言う関数名でユーザーエージェントにモバイル端末のものに特有の文字列が含まれれば TRUE を、そうでなければ FALSE を返してそれに応じて処理をするものとなっており、 これをWordPressのfunctions.phpに追加すれば何処からでも使えるものとなっています。

WordPress3.4以降

処でこの記事の最終段にはWordPressのバージョンが3.4と言う 2013年初頭の時点では割りと新しいバージョンとなるものに於いては モバイル端末判別用の新しい関数である wp_is_mobile() の追加の旨、知らせてくれています。

この関数についての詳細を分かり易く伝えてくれる記事も 株式会社コミュニティコムのブログの2012年6月24日に wp_is_mobile関数-WordPress3.4から実装されたパソコン用サイトとスマートフォン用サイトを分ける条件分岐タグ として配信されています。

記事に依ればWordPressのwp-includesフォルダのvars.phpファイル内に この関数は記述されており、矢張りユーザーエージェントを見て端末を判断している様です。 functions.phpに何も追加しなくてもモバイル端末を判別出来るようになる関数が WordPressにバージョンアップに依って加わったと言う訳です。 バージョンアップに依りWordPress自体として使い易くなる部分が垣間見える記事でもあります。

iPadがモバイル端末と判断される問題

しかし前者の記事に使い方に依っては、或いは時と場合に依っては困る問題が報告されてもいるのでした。 それは wp_is_mobile() 関数ではiPadはモバイル端末と判断されてしまうのです。 iPadではiPhoneなどのスマートフォンと比べ表示画面が広いですから パソコン画面で見たいと思う人も多いのはネット上にも良く聞かれる意見ですし 自ら使ってみてもスマートフォン用に整形された画面が表示されると 些か使い勝手の悪さに閉口してしまう処です。

従ってiPadがアクセス端末である際はモバイルではなくパソコンと判断させたいのでした。 この際に前者は此処に引用したプログラムを利用する意味を伝えているのです。

メンテナンスの手間を考える

勿論前者に提供される is_mobile() 関数で全く問題なく使えるのですが、 ユーザーエージェントは時折変化が生じるものです。 その時に発生する手間を少しでも抑制したく思い wp_is_mobile()is_mobile() を合体させてメンテナンスの手間をWordPress開発陣に丸投げしてしまおうと考えました。

iPadを除くモバイル端末の検出をするプログラム

そこで以下の様なブログラムを考案してみました。

function is_mobile(){
  if(wp_is_mobile()){
    if(preg_match('/ipad/i', $_SERVER['HTTP_USER_AGENT'])){
      $is_PC = TRUE;
    }else{
      $is_PC = FALSE;
    }
  }else{
    $is_PC = TRUE;
  }
  return $is_PC;
}

構造は至って簡単で先ずWordPressの所与の関数 wp_is_mobile() でパソコンからのアクセスを判別し、 モバイル端末と判別された場合に限ってユーザーエージェントに iPad の文字列が含まれるかどうか調べて、含まれていればパソコンに判別し直す、 と言った極く単純なアルゴリズムになっています。

名前は前者のブログ記事に紹介された is_mobile() を其の儘借りました。 この関数をWordPressのfunctions.phpに追加すれば 何時でも呼び出してモバイル端末にiPadを含めず判別が可能となりますし、 基本的なユーザーエージェント判別の部分のメンテナンスは WordPress本体に任せてしまえると言う寸法です。