admin管理员组文章数量:1130349
I am eperiencing a very annoying problem. I built my website with media queries and is_mobile (thinking is_mobile would be the same as smaller screens. How foolish of me.) but after some testing apparently the iPad kind of screws it up (okay, actually I did).
All my problems could easily be solved if I could exclude an iPad from the wp_is_mobile function. How do I rewrite that function?
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;
}
How would I change this?
I am eperiencing a very annoying problem. I built my website with media queries and is_mobile (thinking is_mobile would be the same as smaller screens. How foolish of me.) but after some testing apparently the iPad kind of screws it up (okay, actually I did).
All my problems could easily be solved if I could exclude an iPad from the wp_is_mobile function. How do I rewrite that function?
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;
}
How would I change this?
Share Improve this question edited Sep 16, 2013 at 19:17 Bram Vanroy asked Sep 16, 2013 at 17:07 Bram VanroyBram Vanroy 5633 gold badges10 silver badges39 bronze badges4 Answers
Reset to default 17t f's answer got me thinking. Actually, I can use the core function and adapt it as I like but just put everything in a new function. So here goes:
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;
}
I know this is old, but I wanted to update it with the proper WordPress way of implementing the previous solutions. As of version 4.9.0, rather than implementing another function, they should filter the result of wp_is_mobile(). Thus:
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' );
HOWEVER What really should have been done was to bite the bullet and rewrite the theme to work properly on tablets. There were/are more tablet manufacturers than Apple.
You could also use the regularly updated Mobile Detect PHP class to create a custom function for detecting mobiles excluding tablets (thus iPads). At time of writing this answer, the Github repo had most recently been updated to include detection for new Samsung tablets as of 3 months ago.
Assuming you place the required file in directory called /includes/ in your theme, then you can add this code to your 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;
}
}
then use the function md_is_mobile() as a substitute for wp_is_mobile().
I've rewritten (and, in my opinion, optimized) your function a bit:
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:
Okay, once again...
Write a new function that internally uses the core function and extend it:
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
Now you can use your new my_wp_is_mobile function anywhere you want.
I am eperiencing a very annoying problem. I built my website with media queries and is_mobile (thinking is_mobile would be the same as smaller screens. How foolish of me.) but after some testing apparently the iPad kind of screws it up (okay, actually I did).
All my problems could easily be solved if I could exclude an iPad from the wp_is_mobile function. How do I rewrite that function?
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;
}
How would I change this?
I am eperiencing a very annoying problem. I built my website with media queries and is_mobile (thinking is_mobile would be the same as smaller screens. How foolish of me.) but after some testing apparently the iPad kind of screws it up (okay, actually I did).
All my problems could easily be solved if I could exclude an iPad from the wp_is_mobile function. How do I rewrite that function?
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;
}
How would I change this?
Share Improve this question edited Sep 16, 2013 at 19:17 Bram Vanroy asked Sep 16, 2013 at 17:07 Bram VanroyBram Vanroy 5633 gold badges10 silver badges39 bronze badges4 Answers
Reset to default 17t f's answer got me thinking. Actually, I can use the core function and adapt it as I like but just put everything in a new function. So here goes:
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;
}
I know this is old, but I wanted to update it with the proper WordPress way of implementing the previous solutions. As of version 4.9.0, rather than implementing another function, they should filter the result of wp_is_mobile(). Thus:
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' );
HOWEVER What really should have been done was to bite the bullet and rewrite the theme to work properly on tablets. There were/are more tablet manufacturers than Apple.
You could also use the regularly updated Mobile Detect PHP class to create a custom function for detecting mobiles excluding tablets (thus iPads). At time of writing this answer, the Github repo had most recently been updated to include detection for new Samsung tablets as of 3 months ago.
Assuming you place the required file in directory called /includes/ in your theme, then you can add this code to your 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;
}
}
then use the function md_is_mobile() as a substitute for wp_is_mobile().
I've rewritten (and, in my opinion, optimized) your function a bit:
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:
Okay, once again...
Write a new function that internally uses the core function and extend it:
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
Now you can use your new my_wp_is_mobile function anywhere you want.
本文标签: functionsExcluding iPad from wpismobile
版权声明:本文标题:functions - Excluding iPad from wp_is_mobile 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/questions/1749085893a2313766.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论