SWELLはキャッシュプラグインと相性が悪い!SWELLのモバイル判定の条件とは?
SWELLはPCとスマホで共通のHTMLになっていません。
内部でis_mobile()関数で判定してHTMLを分けています。
つまり、SWELLは完全なレスポンシブ対応のWordpressテーマとは言えません。
これがどういうことかと言えば、キャッシュプラグインなどでPCとスマホで別々のキャッシュを持つ必要があるということです。
無料のキャッシュプラグインはPCとスマホで別々のキャッシュを持てないものが多いので、そのプラグインを使うと、PCやスマホの表示が崩れたように見えることがあります。
この部分はあまり語られることはないのですが、SWELLを使う大きなデメリットと言っていいです。
また、SWELLは独自のis_mobile()関数を実装しているので、その判定条件を知っておくことはトラブルを避けるためにも重要です。
SWELLのPCとスマホの判定方法
SWELLのis_mobile()判定
SWELLのis_mobile判定は独自実装になっています。
UserAgentから判定しています。
/**
* モバイル判定
*/
public static function is_mobile() {
$ua = \SWELL_Theme::$user_agent;
// iPhone
if (strpos( $ua, 'iphone' ) !== false) return true;
// Android Mobile
if (strpos( $ua, 'android' ) !== false && strpos( $ua, 'mobile' ) !== false) return true;
// BlackBerry
if (strpos( $ua, 'blackberry' ) !== false) return true;
// FireFox Mobile
if (strpos( $ua, 'firefox' ) !== false && strpos( $ua, 'mobile' ) !== false) return true;
// Win mobile
if (strpos( $ua, 'windows' ) !== false && strpos( $ua, 'phone' ) !== false) return true;
return false;
}
WordPress標準のwp_is_mobile()判定
WordPressのwp_is_mobileもUseragentから判定しています。
SWELLとは判定の基準が違うようですね。
例えば、プラグインなどでwp_is_mobile関数を使っていたとして、SWELLとモバイル判定が変わってしまうので、独自関数を導入するデメリットはこの辺でも出てきます。
function wp_is_mobile() {
if ( isset( $_SERVER['HTTP_SEC_CH_UA_MOBILE'] ) ) {
// This is the `Sec-CH-UA-Mobile` user agent client hint HTTP request header.
// See <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Sec-CH-UA-Mobile>.
$is_mobile = ( '?1' === $_SERVER['HTTP_SEC_CH_UA_MOBILE'] );
} elseif ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
$is_mobile = false;
} elseif ( str_contains( $_SERVER['HTTP_USER_AGENT'], 'Mobile' ) // Many mobile devices (all iPhone, iPad, etc.)
|| str_contains( $_SERVER['HTTP_USER_AGENT'], 'Android' )
|| str_contains( $_SERVER['HTTP_USER_AGENT'], 'Silk/' )
|| str_contains( $_SERVER['HTTP_USER_AGENT'], 'Kindle' )
|| str_contains( $_SERVER['HTTP_USER_AGENT'], 'BlackBerry' )
|| str_contains( $_SERVER['HTTP_USER_AGENT'], 'Opera Mini' )
|| str_contains( $_SERVER['HTTP_USER_AGENT'], 'Opera Mobi' ) ) {
$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 );
}
SWELLとキャッシュプラグインの相性問題
SWELLの動作のなかでis_mobileでHTML出力を切り替えている部分は極一部であり、設定によってはis_mobileが使われないこともあります。
しかし、SWELLはis_mobileの端末判定によりHTML出力を切り替える可能性は常にありますので、キャッシュプラグインとの相性問題が発生します。
PCとスマホでキャッシュが別のプラグイン
PCとスマホでキャッシュ同一のプラグイン
まとめ
SWELLはキャッシュプラグインとの相性問題が発生しやすいテーマですので、キャッシュプラグインの使用を非推奨としているのだと思います。
WP ROCKETを推奨しているアフィリエイトの記事が多いですが、PCとスマホでキャッシュがわかれているキャッシュプラグインであれば、有料でも無料でも違いはありません。
SWELLはキャッシュプラグインを非推奨としていますが、その分、テーマ内部でPCとSPに分けて自前でキャッシュしているので、キャッシュプラグインを使わないでも十分高速なテーマになっています。
コメント