UserAgentごとに読み込むソースコードを変える


そんなシチュエーションあんのかよ、と言われると、
非常に返答に困るのですが……だって、あったんだから仕方ないじゃん!w

WordPressがうんたら、というよりかはPHPのコードです。

■PHPでUserAgentごとに、読み込ませる内容を変える

<?php
function is_mobile () {
$useragents = array(
‘iPhone’, // Apple iPhone
‘iPod’, // Apple 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’]);
}
if (is_mobile()) {
【スマホでアクセスしている場合に読み込むコード】
} else {
【そうじゃない場合のコード】
}
?>

——————————————

気になったのは
$_SERVER[‘HTTP_USER_AGENT’]
これ。

せっかくなのでPHPマニュアルで調べてみたところ……
$_SERVER は、ヘッダ、パス、スクリプトの位置のような 情報を有する配列です。この配列のエントリは、Web サーバーにより 生成されます。全ての Web サーバーが……
(参照元:http://php.net/manual/ja/reserved.variables.server.php
ごにょごにょごにょごにょ、と書いているけど、これじゃわからーん。

でも、なんか有名どころだと思うので、いくらでも解釈しやすい言葉に
変えてくれているところはあるようで。

要するに、最初から用意されている関数?配列で、
サーバーの情報やら、アクセスしてきた人のUAの情報やら、いろんなものを
集めてくれているものなんだ~、ということ。

んで、$SERVER[‘ここ‘]の部分にいろいろ入れてあげることで、
具体的な配列の中身を呼び出せる、ってわけ。

今回の「HTTP_USER_AGENT」は、そのまんま
ユーザーエージェントを呼び出すー、ってことですね。

——————————————

次が
「$pattern = ‘/’.implode(‘|’, $useragents).’/i’;」

implode関数は、以前勉強しました( ・w・)b
(参照:get_post_meta()の値が複数ある場合
implode関数は、配列をひとつひとつ文字列に起こす?といえばいいのかな。

これを見ると、ユーザーエージェントの種類を「|」で区切る形で
文字列に起こし、最初は「/」、最後は「/i」という文字列を作っていることになりますね…。
これが何やってるか、は、下を見れば分かるようになります。

——————————————

そしてラスト
preg_match($pattern, $_SERVER[‘HTTP_USER_AGENT’]);」

preg_match関数は、正規表現で、同じ文字列があるかどうかを
判別してくれるそうです。

ここでは、$patternは、ユーザーエージェントを半角文字「|」で区切った文字列にして、
かつ、文字列の最初に「/」、最後に「/i」がついているわけですね。

このpreg_matchのマッチングの文字列は、もともと頭とお尻に「/」をつけるんだそうです。
そして、さらにお尻の「i」、これは「大文字と小文字を判別しない」という意味。
つまり、サーバーから提供されるユーザーエージェントの名前が、
大文字でも小文字でも判定してくださいね! ってことですね。

——————————————

で、ラストのラスト、上で説明している関数のマッチングを
外に持っていって(returnについてはWordBench Nagoya2月で勉強しました><b)
「is_mobile()」関数として使えるようにする、ってことです。

ふー、理解するのは何とかできそうなんですが…
こういうのを自力で書けるようにはなれんもんかなぁ…。精進していきます!

参考にさせていただきました!:「Ken’s We~b」様、「アルファシス」様、「どうにかなるブログ」様

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

This blog is kept spam free by WP-SpamFree.