WordPress - モバイル・タブレットを判定する wp_is_mobile()

モバイル判定

以前、WordPressでサイトを運営している方から、 ユーザーの使用端末判定について次のような質問を受けました。

相談者「モバイルとタブレットの場合に、 別のページを表示するようなブログラムを作ろうとしています」

相談者「その場合、ユーザーの端末がスマホかタブレットかPCかを 判定するのに使える関数ってあります?」

私「はい、ありますよ。『wp_is_mobile()』という関数です」

私「wp_is_mobile()関数は、Ver3.4から組み込まれた関数です。 Ver3.4以上のWordPressをお使いなら大丈夫ですよ」

相談者「名前から推測するとこの関数の戻り値は『true』か『false』ですよね」

私「はい。アクセスしてきた端末がスマホかタブレットなら『true』、 それ以外(PC)なら『false』を返します」

今回はこのwp_is_mobile()関数について少し掘り下げて紹介します。

wp_is_mobile()の使用方法

if文で分岐するなら次のようになります。


<? php if ( wp_is_mobile() ) : ?>
  スマホ・タブレット用ロジック
<? php else: ?>
  PC用ロジック
<? php endif; ?>


スマートフォンだけでなく、 タブレット端末の場合もtrueが返ってくる点に注意が必要です。

wp_is_mobile()のソースコード

この関数は「wp_includes/var.php」で次のように定義されています。


function wp_is_mobile() {
	if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
		$is_mobile = false;
	} elseif ( strpos( $_SERVER['HTTP_USER_AGENT'], 'Mobile' ) !== false // many mobile devices (all iPhone, iPad, etc.)
		|| strpos( $_SERVER['HTTP_USER_AGENT'], 'Android' ) !== false
		|| strpos( $_SERVER['HTTP_USER_AGENT'], 'Silk/' ) !== false
		|| strpos( $_SERVER['HTTP_USER_AGENT'], 'Kindle' ) !== false
		|| strpos( $_SERVER['HTTP_USER_AGENT'], 'BlackBerry' ) !== false
		|| strpos( $_SERVER['HTTP_USER_AGENT'], 'Opera Mini' ) !== false
		|| strpos( $_SERVER['HTTP_USER_AGENT'], 'Opera Mobi' ) !== false ) {
			$is_mobile = true;
	} else {
		$is_mobile = false;
	}

	/**
	 * Filters whether the request should be treated as coming from a mobile device or not.
	 *
	 * @since 4.9.0
	 *
	 * @param bool $is_mobile Whether the request is from a mobile device or not.
	 */
	return apply_filters( 'wp_is_mobile', $is_mobile );
}

注意点

キャッシュ機能を使っている場合は、動作しない可能性が高いです。

サーバーでのキャッシュ機能や、 WordPressのキャッシュイン用プラグインを使用している場合は、 うまく表示されないと思いますので確認が必要です。

デバイス毎にテーマを切り替えたいだけなら

もし、デバイス毎にWordPressテーマを切り替えたいだけなら、 次のようなプラグインを使う方法もあります。

「Any Mobile Theme Switcher」

「Multi Device Switcher」