コンテキスト
Twenty Thirteenに基づいた子テーマを作成しましたが、これは非常にうまく機能します。親テーマをバージョン1.3に更新した後、キャッシュされた親テーマのによって引き起こされたスタイリングの奇妙な動作に気付きましたstyle.css
。
子テーマのコンテンツは次のとおりですstyle.css
(ヘッダーを省略)
/* =Imports styles from the parent theme
-------------------------------------------------------------- */
@import url('../twentythirteen/style.css');
そのため、子テーマのstyle.css
は、親テーマのをインポートするだけstyle.css
です。
子テーマのカスタマイズを含む別のcssファイルもありますfunctions.php
。
// Enqueue parent theme's style.css (faster than using @import in our style.css)
$themeVersion = wp_get_theme()->get('Version');
// Enqueue child theme customizations
wp_enqueue_style('child_main', get_stylesheet_directory_uri() . '/css/main.css',
null, $themeVersion);
これにより、次のような非常に優れたcss URLが得られますdomain.com/wp-content/themes/toutprettoutbon/css/main.css?ver=1.0.1
。子テーマが更新されたときにスタイルシートが確実に再読み込みされます。
今、問題
ステートメント@import url('../twentythirteen/style.css');
は、基礎となる親テーマのバージョンから完全に独立しています。実際、子テーマを更新せずに親テーマを更新できますが、ブラウザは古いバージョンのキャッシュバージョンを引き続き使用します../twentythirteen/style.css
。
以下をキューに入れるTwenty Thirteenの関連コードstyle.css
:
function twentythirteen_scripts_styles() {
// ...
// Add Genericons font, used in the main stylesheet.
wp_enqueue_style( 'genericons', get_template_directory_uri() . '/genericons/genericons.css', array(), '3.03' );
// Loads our main stylesheet.
wp_enqueue_style( 'twentythirteen-style', get_stylesheet_uri(), array(), '2013-07-18' );
// Note usage of get_stylesheet_uri() which actually enqueues child-theme/style.css
// Loads the Internet Explorer specific stylesheet.
wp_enqueue_style( 'twentythirteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentythirteen-style' ), '2013-07-18' );
}
add_action( 'wp_enqueue_scripts', 'twentythirteen_scripts_styles' );
この問題を解決する方法はいくつか考えられますが、実際に満足できるものはありません。
親テーマが更新されるたびに子テーマを更新して、バージョン文字列を変更します
style.css
(例:)@import url('../twentythirteen/style.css?ver=NEW_VERSION');
。これにより、親テーマのバージョンと子の間に不要で迷惑なリンクが作成されます。私の子供のでは
functions.php
、1)wp_dequeue_style
付属の子テーマのstyle.css
と2)親テーマだバージョン文字列を直接。これにより、親テーマのキューに入れられたcssの順序が乱れます。wp_enqueue_style
style.css
style_loader_tag
フィルタを使用して、生成されたcss<link>
タグをstyle.css
変更し、パスを変更して、親文字style.css
列のWITH文字列を直接指すようにします。このような一般的なニーズ(キャッシュの無効化)については、かなりわかりにくいようです。親テーマを
style.css
子テーマにダンプしstyle.css
ます。(1)と同じですが、少し高速です。子テーマを
style.css
親テーマのシンボリックリンクにしstyle.css
ます。これはかなりハックらしい...
私は何かを見逃しましたか?助言がありますか?
編集する
追加されましたgenericicons.css
し、ie.css
私は変更することはできませんなぜ親テーマでのスタイルシートは、明確にする@import
ためにCSS文をwp_enqueue_style
自分の子のテーマで。現在、@import
私の子テーマのステートメントで、style.css
生成されたページにこの順序があります:
- twentythirteen / genericons / genericons.css->親テーマによってキューに入れられました
- child-theme / style.css->親テーマ、@ imports twentythirteen / style.cssによってキューに入れられました
- twentythirteen / css / ie.css->親テーマによってキューに入れられました
- child-theme / css / main.css->子テーマによってキューに入れられました
親のstyle.css
をの依存関係としてキューに入れるとmain.css
、これは次のようになります。
- twentythirteen / genericons / genericons.css->親テーマによってキューに入れられました
- child-theme / style.css->空、親テーマによってキューに入れられます
- twentythirteen / css / ie.css->親テーマによってキューに入れられました
- twentythirteen / style.css-> main.cssの依存関係として子テーマによってキューに入れられます
- child-theme / css / main.css->子テーマによってキューに入れられました
ie.cssが親テーマのの前に含まれていることに注意してくださいstyle.css
。親テーマのcssファイルのエンキュー順序を変更したくないのは、これがcssルールの優先度に問題を引き起こさないと推測できないためです。
style.css
は、現在と同じ場所には含まれません。親には、他のcssファイルが含まれています。このファイルはstyle.css
、子テーマのcssとの間にある必要があります。
@import
、代わりに親テーマのスタイルシートを独自のスタイルシートの依存関係として設定します。