Simplicityの特徴 › フォーラム › Simplicity2に関する話題何でも › wp_is_mobile() と is_mobile()
- このトピックには7件の返信、1人の参加者があり、最後にuにより8年、 8ヶ月前に更新されました。
-
投稿者投稿
-
-
2016年4月10日 9:27 AM #38932uゲスト
こんにちは
Simplicity2で
「タブレットはモバイル表示」
という設定項目があります。一方、モバイルかどうかの判定は、
wp_is_mobile()
is_mobile()
の二つがあるようですが、Simplicity2でPHPを使って自作関数を作成する場合、
その関数内でのモバイル判定はwp_の無いis_mobile()を使っておけば、冒頭の
「タブレットはモバイル表示」の設定と正しく連動しますか(同じ判定結果になりますか)? -
2016年4月10日 10:59 AM #38940Hidekichiゲスト
wp_is_mobileは
ユーザーエージェント情報($_SERVER[‘HTTP_USER_AGENT’])を調べ、’Mobile’、’Android’、’Silk/’、’Kindle’、’BlackBerry’、’Opera Mini’、’Opera Mobi’のいずれかが含まれている場合にtrueを返す
ということです。
is_mobileは、mobile.phpにてwp_is_mobileを返しているので基本同じものかと。
-
2016年4月10日 6:13 PM #38954uゲスト
Hidekichiさん、
わたしが試した限りでは、IEのF12でiPadモードを選択した場合には、
is_mobile(): false
wp_is_mobile(): true
となりました。なので、
iPadをmobileとして扱いたい場合には、wp_is_mobile()を使うと同時に、
「タブレットはモバイル表示」を有効化iPadをPCとして扱いたい場合には、is_mobile()を使うと同時に、
「タブレットはモバイル表示」を無効化の組み合わせで使えば良いのかなと思ったのですが、勘違いでしょうか?
-
2016年4月10日 7:51 PM #38959Hidekichiゲスト
is_mobile(): false
wp_is_mobile(): trueie以外ではどうですか?
単純にipadで判別するならuaを調べて、html(あるいはbody)にclassでipadと入れたらcssでどちらでも好きに表示できます。
ブラウザやOS、デバイス等を検出してclassを付与するスクリプト・「Detectr.js」とか。単純にviewportを入れないか固定値でpcモード、viewportがdevice-widthでmobileモードですが、これはSimplicityのメディアクエリがそうだからそのように表示されているだけで、スマホでもPC表示はできると思います。すんごい読み難いと思いますが(笑)
ただipad、iphoneなどios系は意図としない動作をする事もあるのでかなり注意が必要です。特にタブレットは。
-
2016年4月10日 7:56 PM #38961Hidekichiゲスト
タブレットはモバイル表示はおそらくviewportをどうするかだけの話かと思います。
調べてないですけれども(笑)
device-widthで、cssでスタイルすればメディアクエリで調整できると思います。縦向き、横向きやらがあるのでむずかしいですけれども。
ウチのサイトはdevice-width固定です。タブレットでpc表示とかは考えてなく、横幅があれば勝手にpc表示になります。 -
2016年4月10日 8:58 PM #38968uゲスト
>ie以外ではどうですか?
Chromeでも同じ結果でした。
整理すると、
wp_is_mobile()はSimplicity2の設定と関係なくIE, Chromeの両方でiPadはmobileと判定しました。
一方、
is_mobile()はSimplicity2の設定に連動して結果がmobile, PCと切り替わりました。
私が知りたいのは、Simplicity2がmobile, PCの区別をした場合、それと同じ情報を自作のphp関数内で利用したいのです。
今回の実験結果に関しては、それはis_mobile()で取得できそうですが、iPad以外の端末でもいつでもis_mobile()の値がSimplicity2の判定結果と同じなのかどうか知りたいのです。 -
2016年4月10日 10:41 PM #38975Hidekichiゲスト
> is_mobile()はSimplicity2の設定に連動して結果がmobile, PCと切り替わりました。
なぜこうなるかはわかりますか?
is_mobileはsimplicityで定義されたものであり、wp_is_mobileはwordpressで定義されている関数だからです。
もう少し言うと、カスタマイザーの設定で分岐する所はすべてis_mobileで条件判別しています。だからsimplicityの動作に連動しているように思うんです。というかSimplicityのis_mobileはSimplicityでしか動作しません。
違うテーマでis_mobileと書いたらエラー出るんじゃないでしょうか?(試してないですけども)つまりis_mobileはwp_is_mobileで、simplicity内で利用するis_mobileはis_mobileなのです。
ものは同じものです。ただし、mobile.phpで若干simplicityの方で手が加えられています。これはおそらくSimplicityで何かしらの問題がwp_is_mobileのみの利用にあって、そのためかと思いますが、おそらく古い端末とかのフィックスじゃないかなぁと思います。
昔はsimplicityでも、wp_is_mobileが使われていたような記憶があります。> Simplicity2がmobile, PCの区別をした場合、
> それと同じ情報を自作のphp関数内で利用したいのです。何を作ろうとされているのかはわかりませんが、simplicityと連動したいならis_mobileでやっても良いですし、連動関係なくやるのであればwp_is_mobileを利用するのが普通です。wordpress公式テーマでもwp_is_mobileしか使ってないと思います(みてないですけど(笑)。
けど所詮はuaを見てそこに目的とする単語があるかないかを返してるだけですから、こういった関数を利用しなくても独自に書けばよいですし、利用するのがより簡単なだけです。
> Simplicity2がmobile, PCの区別をした場合
とありますが、これはテーマ側で備わっているかどうかだけの問題で基本wp_is_mobileで書くのが普通かと思うんですが、自作関数に取り込みたいということなのでテーマが変わったとしても動作するようにするか、simplicity専門にするかぐらいの事かと思います。
uaを独自で判断するように書いておけば、Simplicity問わずwordpressの関数も利用しないなら一般的にも使える関数になります。おそらくwp_is_mobile()定義ソース | 本家の一番下ですが、これ見たら、なんでこんなことで悩んでたんだろう?って思うぐらいのことしか書いてません(笑)
ただ、ソース見てもわかるようにこれだけしか判別できないわけです。なので、simplicityのis_mobileではより細かくしてるんだろうと思います。
> iPad以外の端末でもいつでもis_mobile()の値がSimplicity2の
> 判定結果と同じなのかどうか知りたいのです。モバイル判定の条件に漏れがなければ同じになります。iPad以外の端末が何であるか、そのユーザーエージェントが何であるかによると言うことでしょうか。たいてい判別できるはずです。
ちなみにipadは必ずipadとmobileがユーザーエージェントに含まれていると思います。
androidの場合、タブレットにはAndroidと入っているはずですが、mobileは基本スマホしか入ってないとGoogleの偉い人は言います。が、
◆GALAXY Tab S SCT21 ブラウザ
Mozilla/5.0 (Linux; Android 4.4.4; ja-jp; SCT21 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Safari/537.36◆GALAXY Tab SC-01C ブラウザ
Mozilla/5.0 (Linux; U; Android 2.3.6; ja-jp; SC-01C Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1ね?入ってるでしょう?(笑)
つまり古いやつは色々と問題ありなんです。ただ、もう最近のはたいてい問題ないので、ipadとandroidがタブレットとして判断するのが良いでしょうか。どんなものにも例外はあるので、全部に対応するのは大変です。
なので何かを頼りに判断するかはとても難しい部分です。
それらをwp_is_mobileやis_mobileが判断しているからと言って正しいとは限らない場合もあります。で、話は戻り、
> Simplicity2がmobile, PCの区別をした場合、
> それと同じ情報を自作のphp関数内で利用したいのです。この部分だけで言えばis_mobileでいいんじゃなかろうかと思いますが、どのように判別されたら正解なのかによって、あるいはその判定関数をどのように利用して何をするかによって更に手を入れないといけない場合もあり、そのまま利用できる場合もあるという感じです。
とりあえずis_mobileで実装してみてサイトに来られる方等に実機でのレビューを書いてもらうのが良いのではないでしょうか?例えば、本来正しく動作していればこうなるはずですが、みなさんの環境ではどのように見えていますか?と言うような問いかけで、何と言う端末を利用していて正しく動作していないという意見を取り入れ、それに対応できるようにするしか無いと思います。
たいてい問題ないですけどね。もし反応がない、特に問題ないという意見が大半なら、そのままで問題ないです。本当に見たいものは端末関係なく、見れるもので見ると言う方向に皆行きますよ。akbのファンとかNOTTVでしかない番組を見たいがために加入するでしょう?そういう感じです。
その内対応する種類が結構たまってくると、そのほとんどが何年も前のじゃないかって話になって、そんな端末は今すぐ窓から捨ててしまえと発狂するようになります。しかしそれが正常です。全てに対応するか、あきらめるか、答えは2つに1つです。
僕はIEの対応で後者を選びました。そんなもん対応してられるかっ!!って感じです(笑) -
2016年4月12日 8:23 AM #39045uゲスト
Hidekichiさん、
詳しい解説ありがとうございました。
is_mobile()を使う事にします。
やろうとしているのは、Simplicity2がdeviceに応じて画面表示をPCモードやmobileモードに切り替えますが
PCモードの時に、自作のJavaScriptのある関数を実行したいだけです。
なので、今現在、Simplicity2がどっちの状態で表示しているのかを知る方法を探していて、今回のような質問になりました。
詳しく教えて頂いたおかげで良く理解出来ました。
ありがとうございました。
-
-
投稿者投稿
- トピック「wp_is_mobile() と is_mobile()」には新しい返信をつけることはできません。