Como a maioria dos outros, eu recomendo usar o WPTouch. No entanto, ele foi criado mais para oferecer suporte a blogs do que outros formatos de sites, então eu sei que não é a panacéia de soluções para dispositivos móveis (eu executo meu portfólio no WordPress e também no meu blog, e meu portfólio se parece com o ****
WPTouch).
Analisei o código para encontrar as partes relevantes que você precisaria usar para replicar a detecção do navegador móvel. Em primeiro lugar, como mencionado por Jan Fabry, há uma lista de agentes de usuários de navegadores móveis. O WPTouch inclui uma lista padrão, mas também permite adicionar agentes de usuário personalizados com uma configuração ou um filtro chamado 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;
}
A carne do plugin, no entanto, é uma classe:
class WPtouchPlugin {
var $applemobile;
var $desired_view;
var $output_started;
var $prowl_output;
var $prowl_success;
...
O construtor do plugin ( function WPtouchPlugin()
) primeiro adiciona uma ação ao plugins_loaded
gancho para detectar o agente do usuário do navegador móvel e definido $applemobile
como true. Aqui está a função 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;
}
}
}
Agora, o plug-in sabe que você está usando um navegador móvel (de acordo com o agente do usuário do navegador). A próxima parte do plugin é um 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 um desses filtros chama um método que verifica se está ou não $applemoble
definido como verdadeiro. Se for, o WordPress usará sua folha de estilo para celular, seu tema para celular e um modelo de postagem / página para celular, em vez dos padrões para o seu tema. Basicamente, você está substituindo o comportamento padrão do WordPress com base no fato de o navegador em uso ter ou não um agente de usuário que corresponda à sua lista de "navegadores móveis".
O WPTouch também inclui a capacidade de desativar o tema móvel - quando você visita um site WPTouch em um iPhone, há um botão na parte inferior que permite visualizar o site normalmente. Você pode considerar isso ao criar sua própria solução.
Isenção de responsabilidade: Todo o código acima foi copiado da fonte para o WPTouch versão 1.9.19.4 e está protegido pela GPL. Se você reutilizar o código, seu sistema também deverá estar em conformidade com os termos da GPL. Eu não escrevi esse código.