wp_is_mobile()函数是WordPress自带的用来判断是否是移动设备的函数,这个函数的具体代码内容如下:
function wp_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 || strpos( $_SERVER['HTTP_USER_AGENT'], 'Opera Mobi' ) !== false ) { $is_mobile = true; } else { $is_mobile = false; } /** * Filters whether the request should be treated as coming from a mobile device or not. * * @since 4.9.0 * * @param bool $is_mobile Whether the request is from a mobile device or not. */ return apply_filters( 'wp_is_mobile', $is_mobile ); }
从代码中我们不难看出,判断的一句是根据HTTP_USER_AGENT来进行判断的,那么言外之意,这个函数只能判断设备,但是无法考虑到分辨率的问题,可能很多新手都以为这个可以考虑到设备的分辨率或者用来自适应,虽然一定程度上面,可以通过设备动态来添加额外的CSS达到你想要的效果,但是最终自适应还是得依靠CSS和JS的结合来实现。
其次就是wp_is_mobile()函数整体更多的是用在加载和展示方面,有些内容,可能移动端需要展示,但是PC端不需要站点,不过比较关键的也是很多人比较纠结的问题在于,有些内容想在指定分辨率下显示,那么这样的情况,就可以通过该函数配合CSS自适应或者JS增加display:none属性来变相隐藏了,这是我能想到的解决办法,如果你有更好的办法,欢迎交流。
最后,关于该函数在使用了缓存插件的情况下会引起的问题,我这边遇到的就是当你使用了缓存插件,第一个访问未缓存的页面的用户将会将其设备阅读形式缓存给所有的阅读者,简单的说就是如果该用户使用的移动端设备进行阅读,而这篇文章之前未被缓存,则可能出现PC端用户阅读该文章的样式是移动端的情况,不过目前的插件已经解决了该问题,比较远古的插件可能会出现该问题。