Добавить агента пользователя в класс тела?


Я ищу способ добавить класс тела в зависимости от пользовательского агента клиента с php.

Я собираюсь реализовать это следующим образом:

Page.php:

<body id="front" <?php ( function_exists ( 'body_class' ) : body_class($classes) ? NULL ); ?> >

Или с помощью добавления его в functions.php файл

К вашему сведению: Вся цель этого состоит в том, чтобы вынюхивать определенные мобильные стили и отключать javascript для некоторых мобильных пользовательских агентов.

p.s. Я не ищу мобильный телефон плагин.

p.p.s. нет, я не заинтересован в использовании мобильной темы.

Author: chrisjlee, 2011-05-18

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');
 6
Author: Milo, 2011-05-18 16:15:28

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

 1
Author: Chip Bennett, 2011-05-18 15:45:52

Используйте медиа-запросы . Если вы измените вывод в зависимости от агента пользователя, вам придется запретить кэширование прокси-серверов, и даже кэширование в локальных статических файлах станет ненужным. И не забудьте отправить заголовок Vary: User Agent – это замедлит загрузку вашего сайта в каждом браузере.

См. также: Как использовать Медиа-запросы CSS3 Для создания мобильной версии Вашего веб-сайта.

 1
Author: fuxia, 2011-05-18 16:39:32