Questo post fa apparire alcune domande che ho incontrato relative alle recenti modifiche ai metodi di accodamento dei fogli di stile presentate in questa discussione e in questa discussione .
I problemi che ho riscontrato sono emersi in uno scenario di casi d'uso generale, utilizzando un tema principale ampiamente utilizzato e ben mantenuto che è specificamente tema figlio pronto su un'installazione di WP 4.0. Le funzioni.php di My child theme contengono solo la wp_enqueue_style
funzione descritta nel Codice .
Si noti che mentre il codice indicato di seguito è specifico di questo tema, gran parte di esso utilizza le convenzioni di codifica correnti utilizzate dai temi principali. Inoltre, le mie aree di interesse sono molto probabilmente duplicabili su un gran numero di temi genitoriali consolidati attualmente in libertà. Inoltre, le domande che sorgono sono applicabili a livello universale, indipendentemente dal tema principale utilizzato.
NUMERO 1: Twoqueueing
L'impostazione consigliata:
Il tema principale è accodare stili e script usando l' wp_enqueue_scripts
hook, la parte pertinente è la seguente:
add_action('wp_enqueue_scripts', 'parent_theme_function_name');
function parent_theme_function_name() {
wp_register_style( 'avia-style' , $child_theme_url."/style.css", array(), '2', 'all' );
wp_enqueue_style( 'avia-base');
if($child_theme_url != $template_url) { wp_enqueue_style( 'avia-style'); }
}
Il tema Mio figlio functions.php
accoda gli stili per le recenti modifiche al codice:
add_action( 'wp_enqueue_scripts', 'enqueue_parent_theme_style' );
function enqueue_parent_theme_style() {
wp_enqueue_style( 'dm-parent-style', get_template_directory_uri().'/style.css' );
}
Nota i seguenti ID utilizzati dal codice di riferimento:
id='dm-parent-style-css'
è il foglio di stile del tema principale, come accodato dalla funzione tema di mio figlioid='avia-style-css'
è il foglio di stile del tema di mio figlio, accodato dalla funzione tema genitoreid='dm-child-style-css'
è il foglio di stile del tema di mio figlio, accodato dalla funzione del tema di mio figlio
I risultati:
A prima vista, tutto andava bene, con <head
> che mostrava il seguente ordine:
<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
<!-- Multiple individual parent theme styles here -->
<link rel='stylesheet' id='avia-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
Dopo aver installato un plugin, l'ordine di accodamento ora è cambiato come segue:
<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
<!-- Multiple individual parent theme styles here -->
<link rel='stylesheet' id='avia-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
<!-- Pesky plugin styles -->
Alla fine, ho bisogno di caricare i CSS del mio tema figlio dopo qualsiasi plugin, quindi sono stato costretto ad aggiungere un numero di priorità alla funzione nel tema di mio figlio (vedi la discussione precedente relativa al numero di priorità) .
Poiché la mia funzione accoda solo i CSS del tema principale, il risultato è che ora il CSS del tema principale viene spostato alla fine, lasciando i CSS del mio tema figlio in una situazione ancora peggiore di prima.
<!-- Multiple individual parent theme styles here -->
<link rel='stylesheet' id='avia-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
<!-- Pesky plugin styles -->
<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
Ora sono costretto a ricorrere ad accodare anche il mio stile di tema del mio bambino, per assicurarmi che venga spostato indietro nella parte anteriore della linea, causando il suddetto problema di duequeueing (nuovo termine? Lol) il tema del bambino css.
L'installazione obsoleta:
Funzione rivista in tema figlio:
add_action( 'wp_enqueue_scripts', 'enqueue_parent_theme_style', 99 );
function enqueue_parent_theme_style() {
wp_enqueue_style( 'dm-parent-style', get_template_directory_uri().'/style.css' );
wp_enqueue_style( 'dm-child-style', get_stylesheet_directory_uri().'/style.css' );
}
I risultati:
Producendo il seguente ordine nel <head>
:
<!-- Multiple individual parent theme styles here -->
<link rel='stylesheet' id='avia-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
<!-- Pesky plugin styles -->
<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
<link rel='stylesheet' id='dm-child-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
Anche se l'inclusione del foglio di stile figlio nella mia funzione ha provocato l' accodamento di due volte, IMHO è preferibile rispetto alla codifica presupponendo che il tema genitore accluda correttamente il nostro foglio di stile figlio per noi. Sulla base dell'ID assegnato a ogni stile accodato, sembra che il tema genitore lo accoda, non nulla in WP Core.
My Shivm:
Sebbene difficilmente suggerirei che questo sia il mezzo raccomandato (e sono sicuro che gli sviluppatori con più esperienza di codifica di me stesso gemeranno a questa soluzione), ho dequementato l'ID del tema del genitore (usato per accodare lo stile del tema del mio bambino) proprio sopra il mio accenno nel file delle funzioni di mio figlio come mostrato:
add_action( 'wp_enqueue_scripts', 'enqueue_parent_theme_style', 99 );
function enqueue_parent_theme_style() {
wp_enqueue_style( 'dm-parent-style', get_template_directory_uri().'/style.css' );
wp_dequeue_style( 'avia-style' );
wp_enqueue_style( 'dm-child-style', get_stylesheet_directory_uri().'/style.css' );
}
I risultati:
Ciò ha risolto i problemi in questione, risultando in:
<!-- Multiple individual parent theme styles here -->
<!-- Plugin styles -->
<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
<link rel='stylesheet' id='dm-child-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
Ovviamente, ciò richiedeva la conoscenza dell'ID utilizzato dal tema principale: sarebbe necessario qualcosa di più generico da utilizzare come metodologia di sviluppo del tema figlio standard.
PROBLEMA 2: fogli di stile figlio trasferiti
(Sembra difficile credere che questo non sia emerso in un altro thread, anche se non ho visto quelli specifici quando guardavo ... se l'ho perso, sentiti libero di portarlo alla mia attenzione.)
Non uso mai il valore predefinito style.css
nella directory principale del tema figlio per i miei stili di tema - ovviamente deve essere presente, ma tutti i miei stili effettivi vengono compilati da SCSS come file .css minimizzato in una directory / css /. Anche se mi rendo conto che questa non è "la norma prevista" a livello universale per lo sviluppo di temi per bambini, gli sviluppatori di WordPress più seri che conosco fanno qualcosa di simile. Questo, ovviamente, richiede l'accodamento manuale di quel foglio di stile nella mia funzione, indipendentemente dal fatto che il tema genitore lo abbia accodato o meno.
Per riassumere tutto ...
- È sicuro includere il presupposto che i temi dei genitori racchiudano correttamente gli stili dei temi dei bambini, dal punto di vista degli standard dei temi dei bambini?
- La rimozione della priorità potrebbe potenzialmente creare più confusione per parte della comunità di WordPress, quando gli stili di tema figlio iniziano a essere sovrascritti da un plugin. Ci aspettiamo che i temi sovrascrivano gli stili, ma non così tanto con i plugin.
- Quando si utilizza un foglio di stile personalizzato per gli stili di tema figlio reali (come si suppone di inserirli nel predefinito
style.css
), diventa necessario accodare manualmente quel file. In termini di mantenimento della continuità attraverso un ampio spettro di sviluppatori, non avrebbe senso incoraggiare l'accodamento manuale del foglio di stile figlio indipendentemente dal possibile duplicato?