bağlam
Oldukça iyi çalışan Yirmi Onüçü temel alan bir çocuk teması kurdum. Ana temayı 1.3 sürümüne güncelledikten sonra, önbelleğe alınmış ana temanın neden olduğu stil ile garip davranışlar gördüm style.css.
İşte çocuğumun temasının içeriği style.css(başlıkları atlayarak)
/* =Imports styles from the parent theme
-------------------------------------------------------------- */
@import url('../twentythirteen/style.css');
Yani, çocuk teması style.css, ana temayı ithal etmekten başka bir şey yapmaz style.css.
Ayrıca, çocuğumun temalarını özelleştirdiğim ve bunlardan daha fazla istediğim başka bir css dosyası daha var 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);
Bu bana çok güzel bir css URL'si veriyor: domain.com/wp-content/themes/toutprettoutbon/css/main.css?ver=1.0.1çocuk teması güncellendiğinde stil sayfasının yeniden yüklenmesini sağlıyor.
Şimdi sorun
Bu ifade @import url('../twentythirteen/style.css');, alttaki ana temanın sürümünden tamamen bağımsızdır. Aslında, üst tema, alt tema güncellenmeden güncellenebilir, ancak tarayıcılar eski önbelleğe alınmış sürümlerini kullanmaya devam eder ../twentythirteen/style.css.
Yirmi Onüç'deki ilgili kod 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' );
Bu sorunu çözmek için birkaç yol düşünebilirim ama hiçbiri gerçekten tatmin edici değil:
Alt tema,
style.css(örneğin@import url('../twentythirteen/style.css?ver=NEW_VERSION');) içindeki bir sürüm dizesini değiştirmek üzere her güncellendiğinde alt temalarımı güncelle . Bu, ana tema sürümü ve çocuk arasında gereksiz ve can sıkıcı bir bağlantı oluşturur.Çocuğumun yıllarda
functions.php, 1)wp_dequeue_styledahil çocuk teması enstyle.cssve 2) ana tema sürüm dizesinin İLE doğrudan. Bu, ana temada kuyruğa alınmış css sırasını bozar.wp_enqueue_stylestyle.cssstyle_loader_tagOluşturulan css<link>etiketinistyle.cssdeğiştirmek ve doğrudan üst temanınstyle.cssWITH sürüm dizesiyle işaret etmek için yolu değiştirmek için filtreyi kullanın . Böyle yaygın bir ihtiyaç için oldukça belirsiz görünüyor (önbellek bozma).Ana temayı
style.cssçocuğumun temasına atstyle.css. (1) ile gerçekten aynı, ancak biraz daha hızlı.Çocuğumu
style.cssana temanın ana temasının bir parçası haline getirstyle.css. Bu oldukça garip görünüyor ...
Bir şey mi kaçırdım? Baska öneri?
Düzenle
Eklenen genericicons.cssve ie.cssben değiştiremem neden ana tema stil sayfaları netleştirmek için @importiçin css deyimi wp_enqueue_styleÇocuğum tema. Şu anda, @importçocuğumun temasındaki bir ifadeyle style.css, oluşturulan sayfalarda şu sırayı aldım:
- yirmi onüç / genericons / genericons.css -> ana tema tarafından çoğaltılmıştır
- child-theme / style.css -> ebeveyn teması tarafından sıkıştırılmış, @ yirmi on üç / style.css içeriyor
- yirmi on üç / css / ie.css -> ana tema tarafından çoğaltılmıştır
- child-teması / css / main.css -> alt tema tarafından çoğaltılmıştır
Ebeveynin style.cssbağımlılığını zorlarsam main.css, bu olur:
- yirmi onüç / genericons / genericons.css -> ana tema tarafından çoğaltılmıştır
- child-theme / style.css -> boş, üst tema tarafından çoğaltılmıştır
- yirmi on üç / css / ie.css -> ana tema tarafından çoğaltılmıştır
- yirmi onüç / style.css -> çocuk teması tarafından main.css bağımlılığı olarak eklendi
- child-teması / css / main.css -> alt tema tarafından çoğaltılmıştır
İe.css'nin şimdi ana temanın önüne eklendiğine dikkat edin style.css. Ana temanın css dosyalarının düzenleme sırasını değiştirmek istemiyorum çünkü bunun css kurallarının önceliği ile sorunlara neden olmayacağını düşünemiyorum.
style.css, şu an olduğu gibi aynı yere dahil edilmeyecek. Üst öğe, style.cssalt temanın css'i arasına girmesi gereken diğer css dosyalarını içerir .
@import, bunun yerine ana temanın stil sayfasını kendi stil sayfanıza bağlı olarak ayarlayın .