Como la mayoría de los demás, recomiendo usar WPTouch. Sin embargo, está construido más para admitir blogs que otros formatos de sitios web, así que sé que no es la panacea de las soluciones móviles (corro mi cartera en WordPress y mi blog, y mi cartera se ve como ****
en WPTouch).
Así que eché un vistazo al código para encontrar las partes relevantes que necesitarías usar para replicar la detección del navegador móvil. En primer lugar, como lo mencionó Jan Fabry, hay una lista de agentes de usuarios de navegadores móviles. WPTouch incluye una lista predeterminada, pero también le permite agregar agentes de usuario personalizados con una configuración o con un filtro llamado 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 carne del complemento, sin embargo, es una clase:
class WPtouchPlugin {
var $applemobile;
var $desired_view;
var $output_started;
var $prowl_output;
var $prowl_success;
...
El constructor del complemento ( function WPtouchPlugin()
) primero agrega una acción al gancho plugins_loaded
para detectar el agente de usuario del navegador móvil y establece $applemobile
en verdadero. Aquí está la función específica:
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;
}
}
}
Ahora el complemento sabe que está usando un navegador móvil (de acuerdo con el agente de usuario del navegador). La siguiente parte carnosa del complemento es un conjunto de filtros:
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') );
}
Cada uno de estos filtros llama a un método que verifica si $applemoble
está configurado como verdadero o no. Si es así, WordPress utilizará su hoja de estilo móvil, su tema móvil y una plantilla de publicación / página móvil en lugar de las predeterminadas para su tema. Básicamente, usted está anulando el comportamiento predeterminado de WordPress basado en si el navegador que se está utilizando tiene o no un agente de usuario que coincide con su lista de "navegadores móviles".
WPTouch también incluye la posibilidad de desactivar el tema móvil: cuando visita un sitio WPTouch en un iPhone, hay un botón en la parte inferior que le permite ver el sitio normalmente. Es posible que desee considerar esto mientras crea su propia solución.
Disclaimer: Todo el código anterior se copió de la fuente de WPTouch versión 1.9.19.4 y está protegido por la GPL. Si reutiliza el código, su sistema también debe cumplir con los términos de la GPL. No escribí este código.