他のほとんどの場合と同様に、WPTouchを使用することを強くお勧めします。ただし、他のWebサイト形式よりもブログをサポートするために構築されているため、モバイルソリューションの万能薬ではないことがわかります(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
trueに設定します。具体的な機能は次のとおりです。
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サイトにアクセスすると、下部にボタンがあり、サイトを通常どおり表示できます。独自のソリューションを構築する際に、これを検討することもできます。
免責事項: 上記のコードはすべて、WPTouchバージョン1.9.19.4のソースからコピーされ、GPLで保護されています。コードを再利用する場合、システムはGPLの条件にも準拠する必要があります。 私はこのコードを書きませんでした。