Contexto
Eu construí um tema infantil baseado no Twenty Treze, que funciona muito bem. Após atualizar o tema pai para a versão 1.3, notei um comportamento estranho com o estilo causado por um tema pai em cache style.css.
Aqui está o conteúdo dos temas do meu filho style.css(omitindo cabeçalhos)
/* =Imports styles from the parent theme
-------------------------------------------------------------- */
@import url('../twentythirteen/style.css');
Portanto, o tema filho style.cssnada mais faz do que importar o tema pai style.css.
Eu também tenho outro arquivo css com as personalizações do meu tema filho, as quais coloco assim 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);
Isso me fornece um URL de CSS muito bom como este: domain.com/wp-content/themes/toutprettoutbon/css/main.css?ver=1.0.1que garante que a folha de estilos seja recarregada quando o tema filho for atualizado.
Agora o problema
A declaração @import url('../twentythirteen/style.css');é completamente independente da versão do tema pai subjacente. De fato, o tema pai pode ser atualizado sem atualizar o tema filho, mas os navegadores ainda usarão as versões em cache do antigo ../twentythirteen/style.css.
Código relevante no Twenty Treze que enfileira o 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' );
Posso pensar em algumas maneiras de resolver esse problema, mas nenhuma é realmente satisfatória:
Atualizar o tema filho sempre que o tema pai for atualizado para alterar uma sequência de versão em
style.css(por exemplo@import url('../twentythirteen/style.css?ver=NEW_VERSION');). Isso cria um link desnecessário e irritante entre a versão do tema pai e o filho.No meu filho
functions.php, 1)wp_dequeue_styleo tema filho incluídostyle.csse 2)wp_enqueue_styleo tema paistyle.cssdiretamente com a string de versão. Isso atrapalha a ordem do CSS na fila no tema pai.Use o
style_loader_tagfiltro para modificar a<link>tag css geradastyle.csse modificar o caminho para apontar diretamente para a sequência WITH version de um tema paistyle.css. Parece bastante obscuro para uma necessidade tão comum (bloqueio de cache).Despejar o tema pai no tema do
style.cssmeu filhostyle.css. O mesmo que (1) realmente, mas um pouco mais rápido.Faça com que meu tema filho
style.cssseja um link simbólico para o tema paistyle.css. Isso parece muito hackish ...
Perdi alguma coisa? Alguma sugestão?
editar
Adicionadas genericicons.csse ie.cssfolhas de estilo no tema pai para esclarecer por que não posso alterar a @importinstrução css para wp_enqueue_styleno meu tema filho. Atualmente, com uma @importdeclaração no tema do meu filho style.css, tenho essa ordem nas páginas geradas:
- twentythteenteen / genericons / genericons.css -> enfileirado pelo tema pai
- child-theme / style.css -> enfileirado pelo tema pai, @imports twentythirteen / style.css
- décimo terceiro / css / ie.css -> enfileirado pelo tema pai
- child-theme / css / main.css -> enfileirado pelo tema filho
Se eu enfileirar os pais style.csscomo uma dependência de main.css, isso se tornará:
- twentythteenteen / genericons / genericons.css -> enfileirado pelo tema pai
- child-theme / style.css -> vazio, enfileirado pelo tema pai
- décimo terceiro / css / ie.css -> enfileirado pelo tema pai
- décimo terceiro / style.css -> enfileirado pelo tema filho como dependência do main.css
- child-theme / css / main.css -> enfileirado pelo tema filho
Observe que o arquivo ie.css agora está incluído antes do tema principal style.css. Não quero alterar a ordem de enfileiramento dos arquivos css do tema pai, porque não posso presumir que isso não causará problemas com a prioridade das regras de css.
style.cssnão seria incluído no mesmo local em que está agora. O pai inclui outros arquivos css que devem estar entre style.csso css e o tema do meu filho.
@import, defina a folha de estilo do tema pai como uma dependência da sua própria folha de estilo .