問題描述
我經歷一個非常討厭的問題。我建立了我的網站與媒體查詢和 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。