Правильное использование wp_is_mobile()?

20 мая 2015 г., 17:27:37
Просмотры: 45.8K
Голосов: 23

Я разработал адаптивную тему и хочу отправить ее на wordpress.org. Перед отправкой я хочу использовать wp_is_mobile() в моей теме, но согласно Справочнику функций/wp is mobile это плохая идея, потому что там говорится следующее:

Вы должны понимать, что эта функция не определяет конкретно мобильный телефон, так как планшет также считается мобильным устройством. Проверьте раздел Плагины для нескольких полезных альтернатив. Также её не следует использовать в темах.

Итак, если я использую её в functions.php моей темы таким образом:

add_filter('body_class','mobile_theme_body_class');     
function mobile_theme_body_class( $classes ){

    if ( wp_is_mobile() ){
        $classes[] = 'mobile';
    }
    else{
        $classes[] = 'desktop';
    }
    return $classes;
}

Будет ли моя тема отклонена?

Дополнительный вопрос:

Если я использую мою функцию как в коде выше и использую плагины кэширования (например, WP Super Cache), будет ли моя функция работать некорректно (не выполняться или давать ложные срабатывания)?

Спасибо за ваше время и ответы...

7
Комментарии

Они говорят, что у нас есть эта функция, но не используйте её, потому что она плохая — какая же ирония. Я не знаю, отклонят ли вашу тему за её использование, но если да, то это доведёт иронию до максимума. В конце концов, это функция WordPress, и она не устарела.

Nicolai Grossherr Nicolai Grossherr
20 мая 2015 г. 17:43:19

Главный вопрос: зачем вы хотите добавить класс для мобильных/десктопных устройств?

TheDeadMedic TheDeadMedic
20 мая 2015 г. 17:44:48

То, что говорит @TheDeadMedic, правда — например, можно работать с CSS media queries.

Nicolai Grossherr Nicolai Grossherr
20 мая 2015 г. 17:47:27

См.: http://wordpress.stackexchange.com/a/97906/21376

s_ha_dum s_ha_dum
20 мая 2015 г. 17:52:55

wp_is_mobile() - это, по сути, просто шутка и совершенно ненадежная функция. Она полагается на данные со стороны пользователя, которые могут быть изменены конечным пользователем. Вы должны понимать, что ваш функционал будет давать сбои более чем в 10% случаев, поэтому значительная часть мобильных пользователей будет получать десктопный контент, нравится им это или нет, и хотите вы того или нет

Pieter Goosen Pieter Goosen
20 мая 2015 г. 17:58:23

Так что функция существует, но она отстой, совсем как query_posts();

Dejo Dekic Dejo Dekic
20 мая 2015 г. 18:06:14

Да, честно говоря, ваше самое надежное решение здесь — это медиазапросы :-)

Pieter Goosen Pieter Goosen
20 мая 2015 г. 18:08:20
Показать остальные 2 комментариев
Все ответы на вопрос 2
0
34

Простыми словами, функция wp_is_mobile() не предназначена для стилизации вашей темы.

Как это работает: Она сопоставляет некоторые нативные названия устройств в строке User Agent. Поэтому, если кто-то изменит эту строку и отправит ложную информацию, вы не сможете определить, какое это устройство. И она не возвращает название устройства, а просто возвращает true, если вы не на десктопе, иначе false.

Как WordPress использует эту функцию: WordPress не использует её для стилизации или добавления CSS. WordPress использует её для добавления или изменения элементов, которые должны быть только на мобильных устройствах (независимо от размера и названия). Например, для добавления touch-скриптов, viewport, мобильных классов в заголовке админки, добавления мобильных кнопок.

Влияние кэширования: Если вы используете плагин кэширования, функция бесполезна. Так как ваш код не выполняется каждый раз, вы получаете один и тот же результат.

WordPress в основном использует эту функцию в бэкенде, и почти все плагины кэширования исключают кэширование в бэкенде или для авторизованных пользователей. Поэтому она работает корректно.

20 мая 2015 г. 19:31:31
0

wp_is_mobile() определяет устройство на основе HTTP_USER_AGENT (это не связано с размером экрана)

wp_is_mobile возвращает true или false в зависимости от значения $_SERVER['HTTP_USER_AGENT']

если $_SERVER['HTTP_USER_AGENT'] содержит Mobile (Android, IOS и т.д.) или Tablet, функция вернет true, иначе вернет false
если $_SERVER['HTTP_USER_AGENT'] равен null, вернет false

для дополнительной информации проверьте исходный код функции

24 окт. 2017 г. 10:04:03