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?
t 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:
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:
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.phpthen use the function
md_is_mobile()
as a substitute forwp_is_mobile()
.I’ve rewritten (and, in my opinion, optimized) your function a bit:
// EDIT:
Okay, once again…
Write a new function that internally uses the core function and extend it:
Now you can use your new
my_wp_is_mobile
function anywhere you want.