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_style
dahil çocuk teması enstyle.css
ve 2) ana tema sürüm dizesinin İLE doğrudan. Bu, ana temada kuyruğa alınmış css sırasını bozar.wp_enqueue_style
style.css
style_loader_tag
Oluşturulan css<link>
etiketinistyle.css
değiştirmek ve doğrudan üst temanınstyle.css
WITH 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.css
ana 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.css
ve ie.css
ben değiştiremem neden ana tema stil sayfaları netleştirmek için @import
iç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.css
bağı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.css
alt 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 .