コンテキスト
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_stylestyle.cssstyle_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、代わりに親テーマのスタイルシートを独自のスタイルシートの依存関係として設定します。