私はphpでクライアントのユーザーエージェントに応じてボディクラスを追加する方法を探しています。
私はこのようにそれを実装しようとしています:
page.php:
<body id="front" <?php ( function_exists ( 'body_class' ) : body_class($classes) ? NULL ); ?> >
またはfunctions.phpファイルに追加して使用する
FYI:これの全体の目的は特定のモバイルスタイルを嗅いで、そしていくつかのモバイルユーザーエージェントのためにJavaScriptを無効にすることです。
p.s。携帯用プラグインを探していません。
p.p.s。いいえ、モバイルテーマの使用には興味がありません。
このようなものかもしれません:
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');
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メディアクエリを使用してモバイル版のWebサイトを作成する方法 も参照してください。