Come la maggior parte degli altri, consiglio vivamente di usare WPTouch. Tuttavia, è costruito più per supportare i blog rispetto ad altri formati di siti Web, quindi so che non è la panacea delle soluzioni mobili (gestisco il mio portafoglio su WordPress così come il mio blog e il mio portafoglio sembra ****
in WPTouch).
Quindi ho dato un'occhiata al codice per trovare le parti pertinenti che dovresti usare per replicare il rilevamento del browser mobile. In primo luogo, come menzionato da Jan Fabry, è un elenco di agenti utente del browser mobile. WPTouch include un elenco predefinito, ma consente anche di aggiungere agenti utente personalizzati con un'impostazione o con un filtro chiamato 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 plugin, tuttavia, è una classe:
class WPtouchPlugin {
var $applemobile;
var $desired_view;
var $output_started;
var $prowl_output;
var $prowl_success;
...
Il costruttore del plug-in ( function WPtouchPlugin()
) aggiunge innanzitutto un'azione plugins_loaded
all'hook per rilevare l'agente utente del browser mobile e impostare $applemobile
su true. Ecco la funzione specifica:
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;
}
}
}
Ora il plug-in sa che stai usando un browser mobile (secondo l'agente dell'utente del browser). La prossima parte carnosa del plugin è un insieme di filtri:
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') );
}
Ognuno di questi filtri chiama un metodo che controlla se $applemoble
è impostato su true. In tal caso, WordPress utilizzerà il tuo foglio di stile mobile, il tuo tema mobile e un modello di post / pagina mobile invece di quelli predefiniti per il tuo tema. Fondamentalmente, stai ignorando il comportamento predefinito di WordPress in base al fatto che il browser in uso abbia o meno un agente utente che corrisponde al tuo elenco di "browser mobili".
WPTouch include anche la possibilità di disattivare il tema mobile: quando visiti un sito WPTouch su un iPhone, c'è un pulsante in basso che ti consente di visualizzare normalmente il sito. Potresti considerare questo mentre costruisci la tua soluzione.
Dichiarazione di non responsabilità: tutto il codice sopra riportato è stato copiato dal codice sorgente per WPTouch versione 1.9.19.4 ed è protetto dalla GPL. Se riutilizzi il codice, il tuo sistema deve anche rispettare i termini della GPL. Non ho scritto questo codice.