Je cherche un moyen d'ajouter une classe de corps en fonction de l'agent d'utilisateur du client avec php.
Je cherche à le mettre en œuvre de cette façon:
page.php:
<body id="front" <?php ( function_exists ( 'body_class' ) : body_class($classes) ? NULL ); ?> >
Ou en l'ajoutant au fichier functions.php
FYI: Le but de ceci est de détecter des styles de mobiles particuliers et de désactiver le javascript pour certains agents d’utilisateurs mobiles.
p.s. Je ne cherche pas de plugin mobile.
p.p.s. Non, l'utilisation d'un thème pour mobile ne m'intéresse pas.
quelque chose comme ceci peut-être:
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 - comme suggéré par Chip, voici la fonction qui utilise les contrôles d'utilisateur 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 inclut des variables globales qui stockent certains de ces useragents. Peut-être quelque chose comme ça:
<?php
global $is_iphone;
$classes = array();
if ( $is_iphone ) $classes[] = 'iphone';
?>
<body id="front" <?php body_class( $classes ); ?>>
(Pourquoi emballez-vous body_class()
dans function_exists()
? Cette balise n'a généralement pas besoin de compatibilité ascendante, comme elle l'a été dans WordPress 2.8.)
Utilisez les requêtes multimédia . Si vous modifiez votre sortie en fonction de l'agent utilisateur, vous devez interdire les caches de proxy, et même la mise en cache dans des fichiers statiques locaux deviendra inutile. Et n’oubliez pas d’envoyer un en-tête Vary: User Agent
- ceci ralentira les temps de chargement de votre site dans chaque navigateur.
Voir aussi: Comment utiliser les requêtes multimédia CSS3 pour créer une version mobile de votre site Web .