Podobnie jak większość innych, bardzo polecam korzystanie z WPTouch. Jednak jest zbudowany bardziej do obsługi blogów niż innych formatów witryn, więc wiem, że nie jest to panaceum na rozwiązania mobilne (prowadzę moje portfolio na WordPress, a także na moim blogu, a moje portfolio wygląda jak ****
w WPTouch).
Rzuciłem więc okiem na kod, aby znaleźć odpowiednie części, których należy użyć do zreplikowania wykrywania przeglądarki mobilnej. Po pierwsze, jak wspomniał Jan Fabry, jest to lista agentów użytkownika przeglądarki mobilnej. WPTouch zawiera domyślną listę, ale umożliwia także dodawanie niestandardowych programów użytkownika z ustawieniem lub filtrem o nazwie 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;
}
Jednak mięso wtyczki jest klasą:
class WPtouchPlugin {
var $applemobile;
var $desired_view;
var $output_started;
var $prowl_output;
var $prowl_success;
...
Konstruktor wtyczki ( function WPtouchPlugin()
) najpierw dodaje akcję do przechwytywania w plugins_loaded
celu wykrycia klienta użytkownika przeglądarki mobilnej i ustawia wartość $applemobile
true. Oto konkretna funkcja:
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;
}
}
}
Teraz wtyczka wie, że używasz przeglądarki mobilnej (zgodnie z agentem użytkownika przeglądarki). Następną mięsną częścią wtyczki jest zestaw filtrów:
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') );
}
Każdy z tych filtrów wywołuje metodę, która sprawdza, czy $applemoble
wartość true. Jeśli tak, to WordPress użyje mobilnego arkusza stylów, mobilnego motywu i mobilnego szablonu posta / strony zamiast domyślnych szablonów. Zasadniczo zastępujesz domyślne zachowanie WordPressa w oparciu o to, czy używana przeglądarka ma agenta użytkownika, który pasuje do Twojej listy „przeglądarek mobilnych”.
WPTouch obejmuje również możliwość wyłączenia motywu mobilnego - kiedy odwiedzasz witrynę WPTouch na iPhonie, u dołu znajduje się przycisk, który pozwala normalnie wyświetlić stronę. Możesz wziąć to pod uwagę, tworząc własne rozwiązanie.
Oświadczenie: Cały powyższy kod został skopiowany ze źródła dla WPTouch w wersji 1.9.19.4 i jest chroniony na licencji GPL. Jeśli użyjesz ponownie tego kodu, Twój system musi również być zgodny z warunkami GPL. Nie napisałem tego kodu.