正确使用wp_is_mobile()?


18

我已经开发了响应式主题,我想将其提交给wordpress.org。在提交之前,我想wp_is_mobile()在主题中使用它,但是根据Function Reference / wp是可移动的,这是一个坏主意,因为它说的是这样的:

您应该意识到,由于平板电脑被认为是移动设备,因此它不能专门检测到手机。查看“插件”区域,找到几种有用的替代方法。也不应将其用于主题。

因此,如果我在主题function.php中像这样使用它:

add_filter('body_class','mobile_theme_body_class');     
function mobile_theme_body_class( $classes ){

    if ( wp_is_mobile() ){
        $classes[] = 'mobile';
    }
    else{
        $classes[] = 'desktop';
    }
    return $classes;
}

我的主题会被拒绝吗?

子问题:

如果我在上面的代码中使用函数,并在(WP Super Cache)中使用缓存插件,我的函数会被搞砸(执行失败或返回误报)吗?

谢谢您的时间和回答...


1
他们说,我们有此功能,但不要使用,因为它不好-多么具有讽刺意味。我不知道您的主题是否会因使用它而被拒绝,但是如果是这样,那么它将使讽刺性达到最大。毕竟,它是WP函数,不建议使用。
Nicolai 2015年

3
真正的问题是为什么要添加移动/桌面类?
TheDeadMedic 2015年

1
@TheDeadMedic所说的是正确的,例如,您可以使用CSS媒体查询
Nicolai 2015年

1
wp_is_mobile()真的只是个玩笑而已,真的很不可靠。它依赖于最终用户可以操纵的用户端。您需要知道,在超过10%的情况下,您的功能都会失败,因此无论他们是否喜欢它,大量的移动用户都会受到桌面内容的
陶醉

4
因此它就在那里并且很烂,就像query_posts();一样。
Dejo Dekic

Answers:


31

用通俗易懂的术语wp_is_mobile()来说,不是为了设计主题。

工作原理: 与用户代理字符串中某些设备的本机名称匹配。因此,如果有人操纵字符串并发送错误信息,则无法检测到它是什么设备。而且它不返回任何设备名称,仅true当您不在其他桌面上时才返回false

WordPress的使用方式: WordPress不会将其用于样式或在任何地方添加CSS。WordPress使用它来添加或操作应仅在移动设备上进行的操作(无论大小和名称如何),例如,添加触摸脚本,添加视口,在管理标头中添加移动类,添加移动按钮。

缓存的效果:如果使用缓存插件,那就没有用了。由于您的代码并非每次都执行,因此您每次都会获得相同的结果。

WordPress大多在后端使用它,几乎每个缓存插件都排除了在后台缓存或针对已登录用户的缓存。所以它工作正常。


1

wp_is_mobile()与无关HTTP USER AGENT,与屏幕尺寸无关

wp_is_mobile 根据返回true或false $_SERVER['HTTP_USER_AGENT']

如果$_SERVER['HTTP_USER_AGENT']包含Mobile(Android或BlackBerry等),

然后wp_is_mobile返回-true(检测为移动设备),否则返回false

一个简单的用例-要建立链接,请尝试导航到Mobile App或Web页面。

有关更多信息,请检查功能源代码

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.