web-dev-qa-db-ja.com

ボディクラスにUseragentを追加しますか?

私はphpでクライアントのユーザーエージェントに応じてボディクラスを追加する方法を探しています。

私はこのようにそれを実装しようとしています:

page.php:

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

またはfunctions.phpファイルに追加して使用する

FYI:これの全体の目的は特定のモバイルスタイルを嗅いで、そしていくつかのモバイルユーザーエージェントのためにJavaScriptを無効にすることです。

p.s。携帯用プラグインを探していません。

p.p.s。いいえ、モバイルテーマの使用には興味がありません。

4
chrisjlee

このようなものかもしれません:

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のuseragentsチェックを使った機能は次のとおりです。

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
Milo

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
Chip Bennett

メディアクエリを使用します 。ユーザエージェントに応じて出力を変更すると、プロキシキャッシュを許可しないようにしなければならなくなり、ローカルの静的ファイルへのキャッシュでさえも不必要になります。そしてヘッダーVary: User Agentを送るのを忘れないでください - これはあなたのサイトがすべてのブラウザでロードする時間を遅くする でしょう

CSS3メディアクエリを使用してモバイル版のWebサイトを作成する方法 も参照してください。

1
fuxia