像大多数其他人一样,我强烈建议使用WPTouch。然而,与其他网站格式相比,它更多地支持博客,因此我知道它不是移动解决方案的灵丹妙药(我在WordPress和博客上运行我的公文包,我的公文包看起来像****
在WPTouch中)。
所以我确实查看了代码,找到了复制移动浏览器检测所需的相关部分。首先,正如Jan Fabry所提到的,是一个移动浏览器用户代理列表。WPTouch包括一个默认列表,但也允许您使用一个名为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;
}
不过,插件的核心是一个类:
class WPtouchPlugin {
var $applemobile;
var $desired_view;
var $output_started;
var $prowl_output;
var $prowl_success;
...
插件的构造函数(
function WPtouchPlugin()
) 首先将操作添加到
plugins_loaded
钩子以检测移动浏览器的用户代理并设置
$applemobile
为真。具体功能如下:
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;
}
}
}
现在该插件知道您正在使用移动浏览器(根据浏览器的用户代理)。插件的下一个重要部分是一组过滤器:
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\') );
}
每个过滤器都调用一个方法来检查
$applemoble
设置为true。如果是,WordPress将使用您的移动样式表、移动主题和移动帖子/页面模板,而不是主题的默认模板。基本上,您正在根据所使用的浏览器是否具有与您的“移动浏览器”列表匹配的用户代理来覆盖WordPress的默认行为
WPTouch还包括关闭移动主题的功能-当您在iPhone上访问WPTouch网站时,底部有一个按钮,允许您正常查看该网站。您可能希望在构建自己的解决方案时考虑这一点。
Disclaimer: 以上所有代码都是从源代码中复制出来的WPTouch version 1.9.19.4 并受GPL保护。如果您重复使用该代码,您的系统还必须遵守GPL的条款I did not write this code.