Giống như hầu hết những người khác, tôi khuyên bạn nên sử dụng WPTouch. Tuy nhiên, nó được xây dựng để hỗ trợ blog nhiều hơn các định dạng trang web khác, vì vậy tôi biết đó không phải là liều thuốc của các giải pháp di động (tôi chạy danh mục đầu tư của mình trên WordPress cũng như blog của mình và danh mục đầu tư của tôi trông giống như ****
trong WPTouch).
Vì vậy, tôi đã xem mã để tìm các phần có liên quan mà bạn cần sử dụng để sao chép phát hiện trình duyệt di động. Thứ nhất, như được đề cập bởi Jan Fabry, là một danh sách các tác nhân người dùng trình duyệt di động. WPTouch bao gồm một danh sách mặc định, nhưng cũng cho phép bạn thêm các tác nhân người dùng tùy chỉnh với một cài đặt hoặc với một bộ lọc được gọi là 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;
}
Phần cốt lõi của plugin là một lớp:
class WPtouchPlugin {
var $applemobile;
var $desired_view;
var $output_started;
var $prowl_output;
var $prowl_success;
...
Trình xây dựng của plugin ( function WPtouchPlugin()
) trước tiên thêm một hành động vào plugins_loaded
hook để phát hiện tác nhân người dùng của trình duyệt di động và được đặt $applemobile
thành đúng. Đây là chức năng cụ thể:
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;
}
}
}
Bây giờ plugin biết bạn đang sử dụng trình duyệt di động (theo tác nhân người dùng của trình duyệt). Phần tiếp theo của plugin là một bộ các bộ lọc:
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') );
}
Mỗi bộ lọc này gọi một phương thức kiểm tra xem có $applemoble
được đặt thành đúng hay không . Nếu đúng như vậy, thì WordPress sẽ sử dụng biểu định kiểu di động, chủ đề di động của bạn và mẫu bài đăng / trang di động thay vì mẫu mặc định cho chủ đề của bạn. Về cơ bản, bạn đang ghi đè hành vi mặc định của WordPress dựa trên việc trình duyệt đang được sử dụng có tác nhân người dùng phù hợp với danh sách "trình duyệt di động" của bạn hay không.
WPTouch cũng bao gồm khả năng tắt chủ đề di động - khi bạn truy cập trang web WPTouch trên iPhone, có một nút ở phía dưới cho phép bạn xem trang web bình thường. Bạn có thể muốn xem xét điều này khi bạn xây dựng giải pháp của riêng bạn.
Tuyên bố miễn trừ trách nhiệm: Tất cả các mã trên đã được sao chép ra khỏi nguồn cho phiên bản WPTouch 1.9.19.4 và được bảo vệ theo GPL. Nếu bạn sử dụng lại mã, hệ thống của bạn cũng phải tuân thủ các điều khoản của GPL. Tôi đã không viết mã này.