Wordpress - Excluding iPad from wp_is_mobile

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:

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;
}

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 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.