Intereting Posts
TinyMCE разделяет содержимое при вставке. Возможно, ошибка Как определить, не является ли зарегистрированный пользователь не спамом? Можно ли использовать объект в add_action? Как создать форму, в которой результат поиска будет отображаться в базе данных на основе выбора из формы? Отображение страниц для предыдущей страницы / следующей страницы (с несколькими сообщениями / страницами) Используйте wp_list_categories для отображения родительских категорий с фактического срока Сообщения в нескольких категориях разные single.php post-order на моем сайте Перевод текста (WooCommerce) Инициировать действие и обновить страницу после действия формы Несколько страниц для показа сообщений Несколько циклов на странице показывают только имя таксономии первого цикла Индикатор активного меню с подстраницами? Форма контактного формуляра 7 работает над локальной установкой wordpress, но сбой на рабочем сервере Силовой «постоянный» почтовый кеш результатов короткого кода

Исключая iPad из wp_is_mobile

Я испытываю очень неприятную проблему. Я построил свой сайт с медиа-запросами и is_mobile (мышление is_mobile было бы таким же, как у меньших экранов. Как это глупо с моей стороны.), Но после некоторого тестирования, видимо, iPad типа его завинчивает (хорошо, на самом деле я это сделал).

Все мои проблемы могут быть легко решены, если я могу исключить iPad из функции wp_is_mobile. Как переписать эту функцию?

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

Как я могу это изменить?

Ответ tf заставил меня задуматься. Фактически, я могу использовать основную функцию и адаптировать ее, как мне нравится, но просто поместить все в новую функцию. Так вот:

 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 для создания настраиваемой функции для обнаружения мобильных телефонов, исключая планшеты (таким образом, iPads). На момент написания этого ответа репозиторий Github недавно был обновлен, чтобы включить обнаружение новых планшетов Samsung по состоянию на 3 месяца назад.

Предполагая, что вы поместите нужный файл в каталог с именем /includes/ в своей теме, вы можете добавить этот код к своим функциям.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() .

Я переписал (и, на мой взгляд, оптимизировал) вашу функцию немного:

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

// РЕДАКТИРОВАТЬ:

Хорошо, еще раз …

Напишите новую функцию, которая внутренне использует основную функцию и расширяет ее:

 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 

Теперь вы можете использовать свою новую функцию my_wp_is_mobile любом месте.