Como faço para fila minha folha de filhos / s * depois de * cada folha de estilo / declaração de pai?

Estou usando o tema de Oenologia bem escrito por Chip Bennett como o tema Parent to my child.

No meu processo de desenvolvimento, descobri que existem alguns desafios para as pessoas que escrevem temas para crianças quando se trata de estilos de controle.

Acabei de descobrir que meu arquivo principal do estilo.css é carregado antes de cada outro link ou declaração de folha de estilo em , e isso explica por que eu estava tendo problemas para replace alguns dos estilos dos pais.

O estudo mais aprofundado do problema mostra que várias folhas de estilo e estilos Parent podem ser enfileirados no em três lugares; add_action('wp_print_styles', add_action('wp_enqueue_scripts', , e depois add_action('wp_head', ,.

Para manter as coisas simples, estou planejando criar duas folhas de estilo. A primeira folha principal do style.css includeia apenas o @import url() , necessário para carregar a folha de estilos principal da Enologia.

a segunda folha de estilo conteria as regras do meu filho. para garantir que ele seja carregado após todas as outras regras, eu add_action( 'wp_head', lo usando add_action( 'wp_head', ,.

Isso parece razoável? ou há uma maneira melhor (mais correta) de fazê-lo?

btw, alguém sabe o que ‘/parent-theme/style.css ? MRPreviewRefresh = 723 ‘ significa?

Atualizar

wp_enqueue_style () não parece funcionar em wp_head ().

Felicidades,
Gregory

Solutions Collecting From Web of "Como faço para fila minha folha de filhos / s * depois de * cada folha de estilo / declaração de pai?"

Apenas FYI, esta questão provavelmente está localizada muito localizada , já que é específica para o Tema de Enologia.

Dito isto, aqui é onde eu acho que você está tendo um problema: Oenologia enqueues duas folhas de estilo:

  1. style.css , diretamente no header do documento (assim, antes que wp_head() seja triggersdo)
  2. {varietal}.css , em wp_enqueue_scripts , com prioridade 11 , em functions/dynamic-css.php :

     /** * Enqueue Varietal Stylesheet */ function oenology_enqueue_varietal_style() { // define varietal stylesheet global $oenology_options; $oenology_options = oenology_get_options(); $varietal_handle = 'oenology_' . $oenology_options['varietal'] . '_stylesheet'; $varietal_stylesheet = get_template_directory_uri() . '/varietals/' . $oenology_options['varietal'] . '.css'; wp_enqueue_style( $varietal_handle, $varietal_stylesheet ); } // Enqueue Varietal Stylesheet at wp_print_styles add_action('wp_enqueue_scripts', 'oenology_enqueue_varietal_style', 11 ); 

A folha de estilos varietal, que aplica a “pele”, envolve a prioridade 11 , para garantir que a folha de estilos de base, o style.css , as cargas primeiro e a folha de estilos varietal segundo , para causar a cascata correta.

Então, se você precisar replace a folha de estilos varietal , basta enqueue sua segunda folha de estilo após a folha de estilos varietal; ou seja, com uma prioridade de pelo menos 12 ou mais.

Editar

Para fornecer uma resposta mais geral, para a questão mais geral:

A fim de replace uma lista de estilos de estilo pai pai, você precisa conhecer duas coisas:

  1. O gancho de ação no qual a folha de estilos está emtacued
  2. A prioridade na qual o retorno de chamada é adicionado ao gancho

As funções de wp_enqueue_script() ( wp_enqueue_script() / wp_enqueue_style() ) podem ser executadas corretamente em qualquer lugar entre o gancho de init e os wp_print_scripts / wp_print_styles hooks. (O gancho semanticamente correto para executar as wp_enqueue_*() está atualmente wp_enqueue_scripts .) Esta lista inclui as seguintes ações (entre outras, estas são apenas as suspeitas usuais):

  • init
  • wp_head
  • wp_enqueue_scripts
  • wp_print_scripts / wp_print_styles

(Observe que wp_enqueue_scripts , wp_print_styles e wp_print_scripts triggersm dentro de wp_head , em uma prioridade específica .

Então, para replace uma folha de estilo Parent-Theme, você precisa fazer um dos seguintes procedimentos:

  • De-enqueue a folha de estilo Parent-Theme, via wp_dequeue_style( $handle )
  • Remova o retorno de chamada do Tema Principal que enqueça o estilo, via remove_action( $hook, $callback )
  • Use a cascata CSS para replace a folha de estilo Parent-Theme, wp_enqueue_style() folha de estilo Child-Theme wp_enqueue_style() no mesmo gancho com uma prioridade mais baixa ou um gancho posterior .

    Para esta última opção, se o Tema pai usar:

     `add_action( 'wp_enqueue_scripts', 'parent_theme_enqueue_style', $priority )` 

    … então o Child Theme usaria:

     `add_action( 'wp_enqueue_scripts', 'child_theme_enqueue_style', {$priority + 1} )` 

Você sempre deve usar wp_enqueue_style() para carregar sua folha de estilo e essas funções devem ser conectadas ao wp_enqueue_scripts hook com execuções na cabeça . Eu suspeito que você não estava ligando lá, daí o seu problema. (A partir do WP 3.3, se wp_enqueue_style() estiver ligado a qualquer outra coisa, ele lança um aviso com WP_Debug ativado).

A única maneira de garantir que meus estilos tivessem uma palavra final na cascata era incluí-los no final de através do wp_head hook. wp_enqueue não funciona dentro do wp_head, então eu tive que fazer eco do link diretamente:

 function gregory_enqueue_stylesheets() { $base = get_stylesheet_directory_uri(); echo ''; return; } add_action( 'wp_head', 'gregory_enqueue_stylesheets', 18 ); 

Por fim, posso definir meus estilos com relativa facilidade e sem usar altos níveis de especificidade, ou a regra importante! que só deve ser usada como último recurso.

WP precisa de um sistema de seleção de estilo melhor. Todo estilo, seja um link de arquivo ou um estilo inline, deve ser passado pelo mesmo gancho, permitindo que a prioridade determine sua ordem. opcionalmente para fins de debugging, seria útil se o gancho também exibisse os valores de Prioridade de cada estilo talvez em forma comentada.

Atualizar

Tenho sido capaz de manter o controle dos estilos no meu tema Criança, mantendo a cascata original do tema pai (que usa uma folha de estilo principal, uma folha de sub-estilo e algumas instruções de estilo), dividindo minha folha de estilo em duas como explicado em a questão. Eu não estou mais usando o gancho wp_head (), em vez disso, usando o gancho wp_enqueue_scripts () apropriado e padrão com um ordinal alto para garantir que minha folha de estilo seja carregada por último.

a folha de estilos padrão do meu filho:

 /* Theme Name: Oenology-Gregory Template: oenology Version: 20120506-0026 */ @import url("/wp-content/themes/oenology/style.css"); 

a function de enqueue minha folha de estilo principal:

 function gregory_enqueue_stylesheets() { $base = get_stylesheet_directory_uri(); wp_enqueue_style( 'style-gregory', $base.'/style-gregory.css' ); return; } add_action( 'wp_enqueue_scripts', 'gregory_enqueue_stylesheets', 18 ); 

No entanto, existem algumas declarações de estilo geradas pelo WP (ou seja, não o tema pai) que são declaradas após a minha folha de estilo, e eu vou ter que olhar para usar regras de css de alta especificidade para replace as regras que me dizem respeito ou procurar ganchos para desativá-los, em particular a regra de fundo do corpo.

Obrigado a todos por seus comentários.

Felicidades,
Gregory