是否将Useragent添加到Body类?

时间:2011-05-18 作者:chrisjlee

我正在寻找一种根据php客户端的用户代理添加body类的方法。

我希望通过以下方式实现它:

page.php:

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

或者使用将其添加到函数中。php文件

仅供参考:这样做的全部目的是嗅出特定的移动风格,并为一些移动用户代理禁用javascript。

p、 我不是在寻找一个移动插件

p、 另外,不,我对使用移动主题不感兴趣

3 个回复
最合适的回答,由SO网友:Milo 整理而成

可能是这样的:

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\');
Edit - 根据Chip的建议,以下是使用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\');

SO网友:Chip Bennett

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中引入的。)

SO网友:fuxia

使用media queries. 如果根据用户代理更改输出,则必须禁止代理缓存,甚至在本地静态文件中缓存也将变得不必要。别忘了发送标题Vary: User Agent – 这将slow down 您的站点在每个浏览器中的加载时间。

另请参见:How To Use CSS3 Media Queries To Create a Mobile Version of Your Website.

结束