スマートフォン向けの振り分けを自前で行う

スマートフォン向けの振り分けを自前で行う - 実際のところプラグインでいいんだどね

説明

PC向けのサイトをスマートフォン対応する場合、WPtouchやktai styleに代表されるスマートフォン対応のテンプレート切り替えプラグインを使用するのが一般的。そういったプラグインはテンプレート切り替え以外の機能も備えており、そういった機能は必ずしも必要ではない。そんなわけで、ここでは超シンプルなスマートフォン向けのテンプレート切り替えを実現する方法を紹介する。
template_includeフィルターを活用
テンプレートの振り分けを自身でコントロールする方法としては、template_includeフィルターを利用するのが手っ取り早い。具体的には、テーマ内のfunctions.phpにて、add_filter関数を利用する。
add_filter( 'template_include', 'mytheme_template_include' );

function mytheme_template_include( $template ) {
	if ( is_smart_phone() ) {
		$template_sp = str_replace( '.php', '-sp.php', $template );
		if ( file_exists( $template_sp ) )
			$template = $template_sp;
	}
	return $template;
}
このtemplate_includeフィルターはindex.phpやsingle.phpといったテンプレートファイルの振り分けを行う直前に実行されるフィルターで、フィルター関数(ここではmytheme_template_include関数)のパラメータ$templateには最終的にWordPressシステムが選択したテンプレートファイルのフルパス名が格納されてくる。is_smart_phone関数はユーザーエージェントからスマートフォン判定するローカル関数で(内容は後述)、スマートフォンの場合にテンプレートファイル名を'index.php'から'index-sp.php'のように変更している。 あとはPC向けテンプレートと同じように○○-sp.phpを準備すれば、ユーザーエージェントがスマートフォンの場合は○○-sp.phpのテンプレートファイルが切り替えられる。なお、該当する○○-sp.phpが存在しない場合は○○.phpになる。
スマートフォン判定
WordPressにはグローバル変数$is_iphoneがあるが、Androidスマートフォンが対象にならないため、独自のスマートフォン判定を行うis_smart_phone関数を定義する。
function is_smart_phone() {
	return preg_match( '/android.+mobile/i', $_SERVER['HTTP_USER_AGENT'] ) ||
		preg_match( '/iphone/i', $_SERVER['HTTP_USER_AGENT'] );
}
ここではiPhoneとAndroidスマートフォンならtrueを、それ以外はfalseを返す。Windows PhoneやBlackBerryスマートフォンなどを含める場合は、適宜それらの条件を追加する必要がある。またAndroidスマートフォン・タブレットの一部にはイレギュラーが存在するため、それらも正しく振り分けたい場合は個別に対応しなければならない。 テーマのスマートフォン対応をコンパクトに実現する方法は、ざっとこんな感じになる。スマートフォン向け、タブレット向けなど、サイトの目的に応じて自由にテンプレートファイルを振り分けたい場合は、こういった方法を選択してもいいのではないだろうか。

関連

お勧めコンテンツ

display_header_text(2012年9月10日 登録)

bool display_header_text()
ヘッダーのテキストを表示するか調べる。

add_image_size(2012年3月30日 登録)

void add_image_size( string $name [ , int $width = 0 [ , int $height = 0 [ , bool $crop = false ] ] ] )
画像のサイズを設定する。

has_excerpt(2011年4月22日 登録)

bool has_excerpt( [ int $id = 0 ] )
投稿情報に抜粋が含まれている(入力されている)か調べる。

get_post_custom_values(2013年10月7日 登録)

array get_post_custom_values( [ string $key = '' [ , int $post_id = 0 ] ] )
カスタムフィールドの値を取得する。

checked(2010年6月24日 登録)

string checked( mixed $checked [ , mixed $current = true [ , bool $echo = true ] ] )
HTMLのchecked属性を表示する。パラメータ$echoにfalseを指定した場合は表示しない。

最終更新日時 : 2012-01-23 19:54