【WordPress】TCDテーマで子テーマを適用したらモバイルの表示崩れが発生したので対応
おはようございます。
ちょこちょこ キャスト管理プラグイン導入のお仕事をいただけていて、
最近TCDテーマでの導入をしたのですが、単純に子テーマを入れただけでモバイル表示が崩れるという現象が発生。
んー、今までこんなことなかったのになんでだろ。
こういう時に、ひとつずつ切り分けながら調べる力って大事ですよね。(自画自賛)
ということで、
何が起きて何をしたのかをまとめておきます。
今回のWordpressテーマ
「SERUM(TCD096)」という医療系サイトに適したテーマ。比較的新しいテーマかと思います。
もちろん、デモ環境ではモバイルもしっかり表示されます。
現象
これがあるべき姿。
冒頭で話した通りで、難しい話しではないのですが、
- 管理画面でTCDテーマをアップロード
- 特に何も追加していない空の子テーマを作成しアップロード(style.css にも何も定義していない)
- 子テーマを有効化
だけで、PCの表示は問題ないのですが、モバイルでなんだか表示が崩れる。
とりあえず、子テーマの function.php に親テーマの style.css 読込み、子テーマの style.css 読み込みを追加してみる。
<?php
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles', 100 );
function theme_enqueue_styles() {
wp_enqueue_style('parent-style', get_template_directory_uri() . '/style.css');
wp_enqueue_style( 'style-child', get_stylesheet_directory_uri() . '/style.css', array( 'parent-style' ) );
}
?>
今度は全体的におかしい。
うーん。
原因
どうも、CSSの適用順序がおかしい。
親の style.css が適用されていない。というか親の style.css を期待している箇所で、子の style.css が設定されてしまってる。。
何故じゃ。と思って親の funciton.php を調べてみたら、style.css の指定が、
wp_enqueue_style( 'main-style', get_stylesheet_uri(), false, version_num(), 'all');
ってなってる!
えー!
get_stylesheet_uri 使っちゃうと、子テーマ有効化したら子テーマの方見にいっちゃうじゃん!
何故じゃ。
対応
先程の親の style.css の指定だけ対応しようとしても他のCSSとの依存関係もあり無理だったので
一旦親のCSSをすべて無効化し、「wp_enqueue_scripts」へフックして読み込みたい順序で読むようにしました。
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles', 100 );
function theme_enqueue_styles() {
// 親の function.php で追加されたものを削除
$remove_styles = array(
'main-style',
'design-plus',
'sns-botton',
'responsive',
'footer-bar',
'splide_css',
'simplebar'
);
foreach( $remove_styles as $target ) {
if( wp_style_is($target) ) {
wp_dequeue_style($target);
}
}
// 改めて読込み設定をする
wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css');
wp_enqueue_style( 'design-plus', get_template_directory_uri() . '/css/design-plus.css', array('parent-style'),version_num() );
wp_enqueue_style( 'sns-botton', get_template_directory_uri() . '/css/sns-botton.css', array('parent-style'),version_num() );
wp_enqueue_style( 'responsive', get_template_directory_uri() . '/css/responsive.css', array('parent-style'),version_num(), 'screen and (max-width:1221px)' );
wp_enqueue_style( 'footer-bar', get_template_directory_uri() . '/css/footer-bar.css', array('parent-style'),version_num(), 'screen and (max-width:1221px)' );
wp_enqueue_script( 'jquery' );
if ( is_single() ) {
wp_enqueue_script('comment-reply');
wp_enqueue_script( 'comment', get_template_directory_uri() . '/js/comment.js', array(), version_num(), true );
}
wp_enqueue_script( 'jquery.easing.1.4', get_template_directory_uri() . '/js/jquery.easing.1.4.js', array(), version_num(), true );
wp_enqueue_script( 'jscript', get_template_directory_uri() . '/js/jscript.js', array(), version_num(), true );
wp_enqueue_script( 'jquery.cookie.min', get_template_directory_uri() . '/js/jquery.cookie.min.js', array(), version_num(), true );
wp_enqueue_script( 'header_fix', get_template_directory_uri() . '/js/header_fix.js', array(),version_num() );
if(!is_mobile()) {
wp_enqueue_style( 'simplebar', get_template_directory_uri() . '/js/simplebar.css', array('parent-style'),version_num() );
wp_enqueue_script( 'simplebar.min', get_template_directory_uri() . '/js/simplebar.min.js', array(), version_num(), true );
}
wp_enqueue_style( 'splide_css', get_template_directory_uri() . '/js/splide-core.min.css', array('parent-style'), '4.1.3' );
wp_enqueue_script( 'splide_script', get_template_directory_uri() . '/js/splide.min.js', array(), '4.1.3', true );
wp_enqueue_script( 'splide_scroll_script', get_template_directory_uri() . '/js/splide-extension-auto-scroll.min.js', array(), '0.5.3', true );
wp_enqueue_script( 'splide_intersection_script', get_template_directory_uri() . '/js/splide-extension-intersection.min.js', array(), '0.2.0', true );
wp_enqueue_style( 'animations', get_bloginfo( 'stylesheet_directory').'/css/flexslider.css');
wp_enqueue_script( 'flexslider', get_bloginfo( 'stylesheet_directory').'/js/jquery.flexslider-min.js', array('jquery'), null, true );
}
まとめ
バグなのか仕様なのか、そもそもそういうものなのか、よくわかりませんが
もしかしたら比較的新しいTCDテーマだとこうなっているのかも。
もしそうなら、そのうちちゃんとしたやり方も出てくると思いますが、ひとまず暫定的に対応するには
親の読み込みを一旦取消して、子テーマの function.php で必要な CSS / Javascript を読み込むようにすればなんとかなります。
納期もあってちょっと焦りましたが、なんとかなってよかった。
何かのお役に立てれば。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません