Come caricare script/stili specifici per una pagina

25 ago 2016, 20:27:55
Visualizzazioni: 22.7K
Voti: 13

So che secondo il processo di avvio predefinito di WordPress, prima viene chiamato il file functions.php, poi seguono tutti gli elementi del tema. Ma attualmente sto per rifattorizzare completamente il mio tema per ottimizzarlo. La mia idea è quella di avere un file CSS base per le proprietà comuni, normalize e colori. Oppure mantenere un singolo file CSS, ma in questo caso ho bisogno di codificare uno switch case in functions.php per determinare la pagina. E un altro specifico per ogni pagina, perché non ha senso caricare un enorme file di stili CSS con tutti gli stili definiti.

Quindi la mia domanda è: qual è il punto migliore per agganciare il caricamento di script/stili specifici?

Dovrebbe essere nel file header-xxx.php o in un altro file? Forse c'è un modo per implementare questa idea in modo più scalabile ed elegante?

Sarei grato per qualsiasi aiuto.

0
Tutte le risposte alla domanda 2
3
13

Tutto dipende dall'ampiezza delle tue personalizzazioni e da come organizzerai il tuo materiale. Ma ci sono due modi principali per farlo: functions.php e template files.

Il modo che preferisco è registrare tutti i miei script/stili in functions.php così so con cosa lavorerò, ma metterò in coda solo ciò di cui ho bisogno quando ne ho bisogno.

Potresti mettere in coda tutto il tuo materiale in modo condizionale all'interno del file functions.php (if( is_page( 'blah') { //... enqueue stuff }) oppure potresti utilizzare i template file per stilare categorie/tag/post/pagina specifiche ecc.

Quindi, all'interno di quel template file, chiami i tuoi file script/stile enqueue lì. Questo rende anche più chiaro capire cosa viene caricato dove.

Ma sicuramente, se vuoi suddividere il tuo foglio di stile in file più piccoli, avrai bisogno di usare:

La stessa logica si applicherebbe agli script con le corrispondenti funzioni register/enqueue.

Inoltre, tieni in considerazione il numero di richieste nella tua strategia: se suddividi il tuo materiale in più file, cerca di mantenere basso il numero di file caricati per non influire negativamente sul tempo di caricamento della pagina.

C'è un'altra cosa che puoi fare per velocizzare il caricamento della pagina. Se dici al browser di memorizzare nella cache i tuoi fogli di stile, allora magari 1 (o pochi) avrebbero più possibilità di essere caricati dalla cache rispetto ad avere più file sparsi per il tuo sito che devono sempre essere recuperati dal server perché è una nuova richiesta di file su ogni nuova pagina caricata. Quindi tieni presente anche questo.

In ogni caso, memorizzare nella cache 1 o più risorse è un buon approccio e aumenterà la reattività percepita del tuo sito in termini di velocità.

Se hai bisogno di ulteriori indicazioni su come utilizzare queste funzioni, faccelo sapere.

MODIFICA

I motivi principali per registrare gli script sono i seguenti:

  • Rende più semplice chiamare uno script/stile quando ne abbiamo bisogno
  • Consente di utilizzare uno script/stile registrato come dipendenza per un file che dobbiamo caricare
  • Ci impedisce di scrivere lo stesso codice più volte del necessario, semplificando effettivamente il nostro codice
  • Altre cose che al momento potrei non considerare

NOTA

Uno script/stile che è stato registrato non deve essere messo in coda se è elencato come $deps del file che stai attualmente mettendo in coda.

Un esempio (non necessariamente il modo in cui dovresti farlo, ma per farti capire lo scopo):

Ho registrato:

  • common-style.css
  • navigation.css
  • buttons.css

Ora questi stili sono registrati, quindi se vado su una pagina specifica e voglio applicare uno stile diverso lì, metto in coda su quella pagina (tramite istruzione condizionale in functions.php o nel mio page template) specific-style.css in questo modo:

add_action( 'wp_enqueue_scripts', 'my_specific_style' );
function my_specific_style(){
  wp_enqueue_style( 'specific-style', get_stylesheet_directory_uri() . '/path/to/specific-style.css', array( 'common-style', 'navigation', 'button') );
}

Nota che l'array in wp_enqueue_style è un array degli handle degli stili già registrati. WP caricherà convenientemente tutti e 4 i file nell'ordine corretto per rispettare le dipendenze.

Potresti concatenare le dipendenze semplicemente registrando ogni script/stile con la dipendenza corretta.

Ad esempio: buttons.css dipende da navigation.css che dipende da common-style.css.

Se registro con questa logica in mente, ho solo bisogno di mettere in coda specific-style.css con buttons.css come dipendenza e WP collegherà il caricamento per rispettare l'ordine.

25 ago 2016 21:28:20
Commenti

Grazie per la risposta esaustiva, non influirà sulle prestazioni se registrerò script/stili con wp-register-style/script per tutte le mie pagine in functions.php? Quali sono i vantaggi di registrare tutti gli stili e caricarli solo quando necessario?

CROSP CROSP
25 ago 2016 21:44:28

Normalmente no, non dovresti riscontrare problemi di prestazioni, anzi è consigliato procedere in questo modo. Aggiornerò la mia risposta con i principali vantaggi

bynicolas bynicolas
25 ago 2016 22:00:23

risposta aggiornata!

bynicolas bynicolas
25 ago 2016 22:20:09
4

"refactoring", "ottimizzazione", "scalabilità", "eleganza". Preoccupazioni eccellenti! Sei sulla strada giusta. Tuttavia, dividere un file CSS in più file non è la soluzione a queste preoccupazioni. Ecco perché:

I browser memorizzano nella cache i file CSS. Quindi una volta che la prima pagina viene caricata, il browser non richiederà lo stesso file CSS per la pagina successiva. Sì, il caricamento della prima pagina sarà leggermente, impercettibilmente più lento. Ma tutte le pagine successive beneficeranno di questo.

Meno richieste è uno dei modi più importanti per ottimizzare la velocità di un sito web. (vedi Steve Souders o questo articolo).

Un'ulteriore ottimizzazione è minificare il tuo CSS. (vedi post di Google PageSpeed.) Grazie a @bynicolas per il suggerimento.

Certo potresti dire, ma che dire dell'eleganza? Ecco la buona notizia: Sass e LESS. Ti permettono di scrivere meno codice, dividerlo in più file che vengono compilati in un unico file CSS, e molto molto altro.

25 ago 2016 22:11:19
Commenti

PS: In realtà ho avuto la stessa idea alcuni anni fa: perché non dividere un grosso file CSS in file CSS più piccoli specifici per pagina? Sembrava un'ottimizzazione ovvia finché un mio collega non mi ha spiegato perché in realtà renderebbe il sito più lento.

zendka zendka
25 ago 2016 22:20:12

Ottima risposta, ne ho parlato un po' nella mia risposta ma l'hai spiegato bene. Potrebbe non essere intuitivo all'inizio, ma il fatto che tutto sia nella cache renderà effettivamente le cose più veloci. Aggiungerei che minimizzare 1 file CSS più grande sarebbe ancora più vantaggioso che caricare più file più piccoli

bynicolas bynicolas
25 ago 2016 22:23:39

ottimo punto sulla minimizzazione!

zendka zendka
25 ago 2016 22:25:19

Grazie, forse ho descritto la mia idea in modo un po' confuso, ma ho intenzione di avere al massimo due file CSS: il primo è common.css e il secondo è specifico per ogni pagina.

CROSP CROSP
26 ago 2016 06:26:49