Comme la plupart des autres, je recommande fortement d'utiliser WPTouch. Cependant, il est plus conçu pour prendre en charge les blogs que les autres formats de sites Web, donc je sais que ce n'est pas la panacée des solutions mobiles (je gère mon portefeuille sur WordPress ainsi que mon blog, et mon portefeuille ressemble ****
à WPTouch).
J'ai donc jeté un coup d'œil au code pour trouver les parties pertinentes que vous auriez besoin d'utiliser pour répliquer la détection du navigateur mobile. Tout d'abord, comme mentionné par Jan Fabry, est une liste d'agents utilisateurs de navigateur mobile. WPTouch comprend une liste par défaut, mais vous permet également d'ajouter des agents utilisateurs personnalisés avec un paramètre ou un filtre appelé wptouch_user_agents
:
function bnc_wptouch_get_user_agents() {
$useragents = array(
"iPhone", // Apple iPhone
"iPod", // Apple iPod touch
"Android", // 1.5+ Android
"dream", // Pre 1.5 Android
"CUPCAKE", // 1.5+ Android
"blackberry9500", // Storm
"blackberry9530", // Storm
"blackberry9520", // Storm v2
"blackberry9550", // Storm v2
"blackberry9800", // Torch
"webOS", // Palm Pre Experimental
"incognito", // Other iPhone browser
"webmate", // Other iPhone browser
"s8000", // Samsung Dolphin browser
"bada" // Samsung Dolphin browser
);
$settings = bnc_wptouch_get_settings();
if ( isset( $settings['custom-user-agents'] ) ) {
foreach( $settings['custom-user-agents'] as $agent ) {
if ( !strlen( $agent ) ) continue;
$useragents[] = $agent;
}
}
asort( $useragents );
// WPtouch User Agent Filter
$useragents = apply_filters( 'wptouch_user_agents', $useragents );
return $useragents;
}
La viande du plugin, cependant, est une classe:
class WPtouchPlugin {
var $applemobile;
var $desired_view;
var $output_started;
var $prowl_output;
var $prowl_success;
...
Le constructeur du plugin ( function WPtouchPlugin()
) ajoute d'abord une action au plugins_loaded
hook pour détecter l'agent utilisateur du navigateur mobile et définir la valeur $applemobile
true. Voici la fonction spécifique:
function detectAppleMobile($query = '') {
$container = $_SERVER['HTTP_USER_AGENT'];
$this->applemobile = false;
$useragents = bnc_wptouch_get_user_agents();
$devfile = compat_get_plugin_dir( 'wptouch' ) . '/include/developer.mode';
foreach ( $useragents as $useragent ) {
if ( preg_match( "#$useragent#i", $container ) || file_exists( $devfile ) ) {
$this->applemobile = true;
}
}
}
Maintenant, le plugin sait que vous utilisez un navigateur mobile (selon l'agent utilisateur du navigateur). La prochaine partie charnue du plugin est un ensemble de filtres:
if ( strpos( $_SERVER['REQUEST_URI'], '/wp-admin' ) === false ) {
add_filter( 'stylesheet', array(&$this, 'get_stylesheet') );
add_filter( 'theme_root', array(&$this, 'theme_root') );
add_filter( 'theme_root_uri', array(&$this, 'theme_root_uri') );
add_filter( 'template', array(&$this, 'get_template') );
}
Chacun de ces filtres appelle une méthode qui vérifie si elle $applemoble
est définie sur true ou non . Si c'est le cas, WordPress utilisera votre feuille de style mobile, votre thème mobile et un modèle de publication / page mobile au lieu de ceux par défaut pour votre thème. Fondamentalement, vous remplacez le comportement par défaut de WordPress selon que le navigateur utilisé possède ou non un agent utilisateur correspondant à votre liste de "navigateurs mobiles".
WPTouch comprend également la possibilité de désactiver le thème mobile - lorsque vous visitez un site WPTouch sur un iPhone, un bouton en bas vous permet de visualiser le site normalement. Vous voudrez peut-être considérer cela lorsque vous créez votre propre solution.
Avertissement: Tout le code ci-dessus a été copié à partir de la source pour WPTouch version 1.9.19.4 et est protégé sous la GPL. Si vous réutilisez le code, votre système doit également respecter les termes de la GPL. Je n'ai pas écrit ce code.