このブログには、横幅468を2つ設置しています。
1つは、文中に、もう1つは記事の最後に設置しているのですが、このままモバイルで表示させると画面からはみ出てしまいます。
そこで、wp_is_mobile関数を使います。
wp_is_mobile関数
表示切り替えのための基本構文
1 2 3 4 5 |
<?php if (wp_is_mobile()) :?> /*【スマートフォン用をココに書きます。】*/ <?php else: ?> /*【パソコン用をココに書きます。】*/ <?php endif; ?> |
iPadをモバイル認識させない
このwp_is_mobile関数では、iPadもモバイルとして認識してしまうため、わたしは、functions.phpに以下の様に記述。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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']); } |
これで、iPadは、PC表示となります。
次に、single.phpに
1 2 3 4 5 |
<?php if (is_mobile()) :?> /*【スマートフォン用をココに書きます。】*/ <?php else: ?> /*【パソコン用をココに書きます。】*/ <?php endif; ?> |
と記述すれば、iPadをモバイル認識させずに切り替えをさせることが出来ます。
iPadをモバイル認識させないで参考にさせていただいた記事
WordPress:PCとスマートフォンでコンテンツを切り替えたい際に便利なwp_is_mobile関数+α | nxworld
モバイル向け AdSenseを実際に使ってみる
まずは、ともあれコードを取得しなければなりません。
モバイル向け AdSenseを作成する
広告の設定 ⇒ モバイル コンテンツ向け AdSenseを選択し、広告ユニットを作成していきます。
通常の作成とほぼ同じですが、以下の項目は次の様に設定しました。
- マークアップ言語 ⇒ XHTML(WAP 2.0)
- エンコード ⇒ 自動判別
- スクリプト言語 ⇒ PHP(v4.3 以降)
取得が完了したので、このまま先ほどの構文内にコードを貼り付けるだけ。。。
だと思っていたのですが、ここでまさかのエラーを吐き出されてしまいました。
Google Adsenseのモバイル版のエラー解消方法
吐き出されたエラーコードは以下のモノです。
PHP Fatal error: Call to undefined function read_global() in *** on line **原因
先ほどのエラーの意味は、read_global()という関数が未定義だよもしくは、関数名が間違っているよということらしいのですが、Googleがそんなコードを貼り付けてと?
と、はてながいっぱい並びましたが、
PHP では、関数は参照される前に定義されている必要はありません。 条件付きで関数が 定義されるような場合を除きます。 ある条件下でのみ関数が定義される場合には、 その関数定義は関数がコールされる前に 行われていなければなりません。
ユーザー定義関数 | PHP
とあり、条件分岐をしていることが原因だったようです。
対策
原因が分かったのであとは、対策です。
function が集まった以下のブロックを1番初めにもってきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
function read_global($var) { return isset($_SERVER[$var]) ? $_SERVER[$var]: ''; } function google_append_url(&$url, $param, $value) { $url .= '&' . $param . '=' . urlencode($value); } function google_append_globals(&$url, $param) { google_append_url($url, $param, $GLOBALS['google'][$param]); } function google_append_color(&$url, $param) { global $google_dt; $color_array = explode(',', $GLOBALS['google'][$param]); google_append_url($url, $param, $color_array[$google_dt % count($color_array)]); } function google_set_screen_res() { $screen_res = read_global('HTTP_UA_PIXELS'); if ($screen_res == '') { $screen_res = read_global('HTTP_X_UP_DEVCAP_SCREENPIXELS'); } if ($screen_res == '') { $screen_res = read_global('HTTP_X_JPHONE_DISPLAY'); } $res_array = preg_split('/[x,*]/', $screen_res); if (count($res_array) == 2) { $GLOBALS['google']['u_w']=$res_array[0]; $GLOBALS['google']['u_h']=$res_array[1]; } } function google_set_muid() { $muid = read_global('HTTP_X_DCMGUID'); if ($muid != '') { $GLOBALS['google']['muid']=$muid; return; } $muid = read_global('HTTP_X_UP_SUBNO'); if ($muid != '') { $GLOBALS['google']['muid']=$muid; return; } $muid = read_global('HTTP_X_JPHONE_UID'); if ($muid != '') { $GLOBALS['google']['muid']=$muid; return; } $muid = read_global('HTTP_X_EM_UID'); if ($muid != '') { $GLOBALS['google']['muid']=$muid; return; } } function google_set_via_and_accept() { $ua = read_global('HTTP_USER_AGENT'); if ($ua == '') { $GLOBALS['google']['via']=read_global('HTTP_VIA'); $GLOBALS['google']['accept']=read_global('HTTP_ACCEPT'); } } function google_get_ad_url() { $google_ad_url = 'http://pagead2.googlesyndication.com/pagead/ads?'; google_append_url($google_ad_url, 'dt', round(1000 * array_sum(explode(' ', microtime())))); foreach ($GLOBALS['google'] as $param => $value) { if (strpos($param, 'color_') === 0) { google_append_color($google_ad_url, $param); } else if (strpos($param, 'url') === 0) { $google_scheme = ($GLOBALS['google']['https'] == 'on') ? 'https://' : 'http://'; google_append_url($google_ad_url, $param, $google_scheme . $GLOBALS['google'][$param]); } else { google_append_globals($google_ad_url, $param); } } return $google_ad_url; } |
これでエラーが出なくなり、正常に表示されます。
と、これで表示はできたのですが、モバイル向け AdSenseの貼り付けられる個数というのが、1ページに対して1つと決められていた

ということに、作成しながら気づき、文中のものはそのままCSSで無理やりカットしているのでこれもどうするか検討しないといけないなと思っている今日このごろです。