モバイルの時は一覧での画像を小さいのを表示させよう!と考えた時に、デバイスの分岐が必要になった。そんなことを考えていた今日、なにやら人気記事にショートコードを利用する方法がでていました。
[WordPress]まだなら今すぐ入れたい!PC、スマホで表示を分けるショートコード
ショートコード使えるのは便利だなーと思いつつも、エントリーごとで必要だったわけではないので、自分はもっと簡易な分岐を利用することにした。
WordPress 標準の関数 wp_is_mobile()
WordPress には、3.4 からモバイルデバイスを分岐するための関数が導入されています。その関数を使い、簡易的に分岐させてしまいました。
PHP:簡易版分岐コード
if(wp_is_mobile()) {
// モバイル向けのコード
} else {
// モバイル以外へのコード
};
分岐条件詳細
ちなみに 3.8 での wp_is_mobile() の中身は下記のようになっていました。
wp-includes/vars.php
/**
* Test if the current browser runs on a mobile device (smart phone, tablet, etc.)
*
* @return bool true|false
*/function wp_is_mobile() {
static $is_mobile;
if ( isset($is_mobile) )
return $is_mobile;
if ( empty($_SERVER['HTTP_USER_AGENT']) ) {
$is_mobile = false;
} elseif ( strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false // many mobile devices (all iPhone, iPad, etc.)
|| strpos($_SERVER['HTTP_USER_AGENT'], 'Android') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'Silk/') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'Kindle') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mini') !== false
|| strpos($_SERVER['HTTP_USER_AGENT'], 'Opera Mobi') !== false ) {
$is_mobile = true;
} else {
$is_mobile = false;
}
return $is_mobile;
}
上記コードの状態の日
See timeline at 10/30/13 19:36:39
参照:vars.php in tags/3.8/src/wp-includes – WordPress Trac
チェックしているのはユーザーエージェントに単語が含まれているかどうかで、その単語は Mobile
Android
Silk/
Kindle
BlackBerry
Opera Mini
Opera Mobi
ですね。
Mobile
や Android
でチェックしていることもあって、タブレット関係も true
になります。
ネタ元のようにショートコードを作成して利用するのも、内容通り便利なのだろうとはわかりますが、絶対に必要というわけでもないため、今回は独自に分岐しました。
ネタ元の内容で気になる「物足りない点をカスタマイズで解決する」方法
今回参照させて頂いたブログの記事では、下記のような分岐のカスタマイズについてふれられていました。
さて、今回のショートコードは、WordPressの公式関数、wp_is_mobileを利用しています。この関数、「iPadもモバイルと判定する」など、ブラウザーを判別する精度がゆるめです。より完璧にしたい場合は、カスタマイズをする必要があります。
参照:vars.php in tags/3.8/src/wp-includes – WordPress Trac
そう、iPad もモバイルと判定している点のみを触れていますので、iPadが除外されるようにカスタマイズされたようなコードが利用されています。つまり、 Android のタブレットもモバイルとして判定されているため、タブレットとしての分岐ではないというところです。
Android のタブレットとモバイルをチェックする場合は、先に Android かつ Mobile かの判定をいれ、その後に再度、Androidかどうかのチェックをすることでおおよそは分岐されるはずです。
以上、ちょっと気になったことも含めたモバイルの分岐判定方法でした。