问题描述
我经历一个非常讨厌的问题。我建立了我的网站与媒体查询和 is_mobile(认为 is_mobile 将是一样的较小的屏幕,我多么愚蠢),但经过一些测试显然是 iPad 的螺丝钉 (好的,实际上我做了) 。
如果我可以从 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;
}
我该怎么改?
最佳解决方案
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;
}
次佳解决方案
您也可以使用定期更新的 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()
。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。