web-dev-qa-db-ja.com

Wp_is_mobileからiPadを除外する

私は非常に迷惑な問題を経験しています。私はメディアクエリとis_mobileを使って私のウェブサイトを構築しました(is_mobileは小さいスクリーンと同じだろうと思います。私はなんてばかげているのでしょう)。

Wp_is_mobile関数からiPadを除外できれば、私の問題はすべて簡単に解決できます。どのように私はその機能を書き直すのですか?

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 ) {
            $is_mobile = true;
    } else {
        $is_mobile = false;
    }

    return $is_mobile;
}

これをどのように変更しますか?

9
Bram Vanroy

その答えが私に思いつかせた。実際には、私は中心的な機能を使用して私が好きなようにそれを適応させることができますが、ただ新しい機能にすべてを入れてください。だからここに行きます:

function my_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'], '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 ) {
            $is_mobile = true;
    } elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false && strpos($_SERVER['HTTP_USER_AGENT'], 'iPad') == false) {
            $is_mobile = true;
    } elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'iPad') !== false) {
        $is_mobile = false;
    } else {
        $is_mobile = false;
    }

    return $is_mobile;
}
13
Bram Vanroy

また、定期的に更新される Mobile Detect PHPクラス を使用して、タブレットを除く携帯電話(つまりiPad)を検出するためのカスタム関数を作成することもできます。この回答を書いている時点で、 Githubリポジトリ は3か月前の時点で最新のSamsung製タブレットの検出を含むように最新に更新されていました。

必要なファイルをあなたのテーマの/includes/というディレクトリに置いたとしたら、このコードを functions.php に追加できます。

require_once(get_template_directory() . '/includes/Mobile_Detect.php');

function md_is_mobile() {

  $detect = new Mobile_Detect;

  if( $detect->isMobile() && !$detect->isTablet() ){
    return true;
  } else {
    return false;
  }

}

それからmd_is_mobile()の代わりに関数wp_is_mobile()を使います。

4
Astrotim

私はこれが古いことを知っています、しかし私は以前の解決策を実行する適切なWordPress方法でそれを更新したかったです。バージョン4.9.0以降では、他の関数を実装するのではなく、wp_is_mobile()の結果をフィルタリングする必要があります。したがって:

function myprefix_exclude_ipad( $is_mobile ) {
    if (strpos($_SERVER['HTTP_USER_AGENT'], 'iPad') !== false) {
        $is_mobile = false;
    }
    return $is_mobile ;
}
add_filter( 'wp_is_mobile', 'myprefix_exclude_ipad' );

しかし、本当にしなければならなかったことは、弾丸を噛んでタブレットで正しく動作するようにテーマを書き直すことでした。アップルよりもタブレットメーカーが多かったです。

1
Brian Layman

私はあなたの関数を少し書き直しました(そして私の考えでは最適化しました)。

function wp_is_mobile() {
    static $is_mobile;

    if (isset($is_mobile))
        return $is_mobile;

    if (
        ! empty($_SERVER['HTTP_USER_AGENT'])

        // bail out, if iPad
        && false === strpos($_SERVER['HTTP_USER_AGENT'], 'iPad')

        // all the other mobile stuff
        && (
            false !== strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile')
            || false !== 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')
        )
    ) $is_mobile = true;
    else $is_mobile = false;

    return $is_mobile;
}

//編集:

さて、もう一度...

内部的にコア関数と extend itを使用する新しい関数を書きます。

function my_wp_is_mobile() {
    if (
        ! empty($_SERVER['HTTP_USER_AGENT'])

        // bail out, if iPad
        && false !== strpos($_SERVER['HTTP_USER_AGENT'], 'iPad')
    ) return false;
    return wp_is_mobile();
} // function my_wp_is_mobile

今、あなたはあなたが望むところならどこでもあなたの新しいmy_wp_is_mobile関数を使うことができます。

1
tfrommen