Добавить агента пользователя в класс тела?
Я ищу способ добавить класс тела в зависимости от пользовательского агента клиента с php.
Я собираюсь реализовать это следующим образом:
Page.php:
<body id="front" <?php ( function_exists ( 'body_class' ) : body_class($classes) ? NULL ); ?> >
Или с помощью добавления его в functions.php файл
К вашему сведению: Вся цель этого состоит в том, чтобы вынюхивать определенные мобильные стили и отключать javascript для некоторых мобильных пользовательских агентов.
p.s. Я не ищу мобильный телефон плагин.
p.p.s. нет, я не заинтересован в использовании мобильной темы.
3 answers
Возможно, что-то вроде этого:
function my_class_names($classes) {
$useragent = $_SERVER['HTTP_USER_AGENT'];
if(strchr($useragent,'Safari')) $classes[] = 'Safari';
// etc..
return $classes;
}
add_filter('body_class','my_class_names');
Редактировать - согласно предложению Чипа, вот функция, использующая проверки пользователей WordPress:
function my_class_names($classes) {
global $is_lynx, $is_gecko, $is_IE, $is_opera, $is_NS4, $is_safari, $is_chrome, $is_iphone;
if($is_lynx) $classes[] = 'lynx';
elseif($is_gecko) $classes[] = 'gecko';
elseif($is_winIE) $classes[] = 'winIE';
elseif($is_macIE) $classes[] = 'macIE';
elseif($is_opera) $classes[] = 'opera';
elseif($is_NS4) $classes[] = 'NS4';
elseif($is_safari) $classes[] = 'safari';
elseif($is_chrome) $classes[] = 'chrome';
elseif($is_iphone) $classes[] = 'iphone';
else $classes[] = 'other';
return $classes;
}
add_filter('body_class','my_class_names');
WordPress включает глобальные переменные, в которых хранятся некоторые из этих агентов-пользователей. Возможно, что-то вроде этого:
<?php
global $is_iphone;
$classes = array();
if ( $is_iphone ) $classes[] = 'iphone';
?>
<body id="front" <?php body_class( $classes ); ?>>
(Почему вы заворачиваете body_class()
внутрь function_exists()
? Этот тег, как правило, не нуждается в обратной совместимости, так как он был представлен в WordPress 2.8.)
Используйте медиа-запросы . Если вы измените вывод в зависимости от агента пользователя, вам придется запретить кэширование прокси-серверов, и даже кэширование в локальных статических файлах станет ненужным. И не забудьте отправить заголовок Vary: User Agent
– это замедлит загрузку вашего сайта в каждом браузере.
См. также: Как использовать Медиа-запросы CSS3 Для создания мобильной версии Вашего веб-сайта.