将iPad排除在wp_is_mobile之外

时间:2013-09-16 作者:Bram Vanroy

我正在经历一个非常恼人的问题。我用媒体查询和is\\U mobile建立了我的网站(认为is\\U mobile和小屏幕一样。我真傻。)但经过一些测试后,显然iPad有点搞砸了(好吧,实际上是我搞砸了)。

如果我可以将iPad从wp\\U is\\U移动功能中排除,我的所有问题都可以轻松解决。如何重写该函数?

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;
}
我该如何改变这一点?

4 个回复
最合适的回答,由SO网友:Bram Vanroy 整理而成

t f的回答让我思考。实际上,我可以使用核心函数并根据自己的喜好进行调整,但只需将所有内容都放在一个新函数中即可。下面是:

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;
}

SO网友:Astrotim

您还可以使用定期更新的Mobile Detect PHP class 创建一个自定义功能,用于检测除平板电脑(即iPad)以外的手机。在撰写本答案时Github repo 最近一次更新包括3个月前新三星平板电脑的检测。

假设您将所需文件放在名为/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().

SO网友:Brian Layman

我知道这很旧,但我想用WordPress实现以前解决方案的正确方式来更新它。从版本4.9.0开始,他们应该过滤wp\\u is\\u 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\' );
然而,真正应该做的是咬紧牙关,重写主题,以便在平板电脑上正常工作。平板电脑制造商比苹果多。

SO网友:tfrommen

我已经重写了(并且在我看来,优化了)您的函数:

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;
}

// EDIT:

好吧,再一次。。。

编写一个内部使用核心函数的新函数,并对其进行扩展:

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 可以在任何地方使用。

结束

相关推荐

从Functions.php中导入WordPress XML文件

我正在开发一个主题,它有不同的添加内容的方法,因此,Wordpress的默认安装不会显示任何内容。我想知道在主题被激活后,是否可以通过内部函数和/或挂钩自动导入XML文件?User installs theme > User activates theme > Code behind the scenes loads up an XML file and performs a silent import of its contents当前要导入XML文件,您必须为Wordpress