Assegnare un numero di versione al foglio di stile principale di un tema child

21 mag 2014, 20:23:29
Visualizzazioni: 28.3K
Voti: 16

In header.php, mi piace assegnare un numero di versione al foglio di stile in modo che il browser sia costretto ad aggiornarlo. Tuttavia, quando si lavora con un tema child, il suo foglio di stile non viene richiamato esplicitamente, ma WordPress lo cerca automaticamente. Quindi, come e dove assegnare un numero di versione al foglio di stile del tema child?

0
Tutte le risposte alla domanda 7
4
17

Penso che il modo migliore per farlo sia lasciare il foglio di stile del tema figlio (style.css) vuoto con solo i commenti necessari (come nome del tema, descrizione ecc., così che WordPress possa riconoscere il tuo tema) e poi creare un altro file css nella cartella del tuo-tema/css/main.css

Dopodiché nel file function.php puoi avere una nuova "versione" ogni volta che modifichi il tuo file:

function my_scripts_and_styles(){

$cache_buster = date("YmdHi", filemtime( get_stylesheet_directory() . '/css/main.css'));
wp_enqueue_style( 'main', get_stylesheet_directory_uri() . '/css/main.css', array(), $cache_buster, 'all' );

}

add_action( 'wp_enqueue_scripts', 'my_scripts_and_styles', 1);

La logica:

Ogni volta che salvi il file, il tempo di modifica del file viene cambiato. Il nuovo tempo viene passato alla funzione date per convertire il tempo (filemtime restituisce un intero che rappresenta il tempo) in un formato data per renderlo una stringa nel formato desiderato. Nel nostro esempio il tempo viene formattato con una precisione al minuto. Puoi modificarlo per tracciare anche i secondi, ad esempio "YmdHis". Successivamente, il nuovo tempo di modifica del file viene passato come nuova versione a wp_enqueue_style.

Riferimenti:

http://www.php.net/filemtime

http://php.net/manual/en/function.date.php

1 giu 2014 14:24:56
Commenti

Preferisco usare la versione del tema come cache buster. Se usi $cache_buster = wp_get_theme()->get('Version') otterrai la versione specificata nel blocco di commento in style.css. Vedi https://codex.wordpress.org/Function_Reference/wp_get_theme per riferimento.

Marcel Stör Marcel Stör
2 gen 2016 16:45:03

Bello, non conoscevo l'esistenza di questa funzione. Ma ancora una volta devi cambiare manualmente la versione ogni volta che fai una modifica e può essere frustrante soprattutto durante lo sviluppo (visti i problemi di cache). Inoltre sei obbligato a codificare in style.css anche se importi il tuo file main.css lì, cosa che tra l'altro non trovo un buon approccio. Inoltre, se programmi in SASS può essere di nuovo difficile mantenerlo. Infine penso che sia più veloce controllare l'ora del file che aprire il file, leggere i primi commenti e trovare la versione (non sono sicuro che wp_get_theme()->get('Version') funzioni in quel modo).

Laxmana Laxmana
4 gen 2016 21:18:45

Vero, ma il lato positivo è che hai un maggiore controllo sui tuoi stili. Puoi aggiornare il CSS in modo incrementale e quando sei soddisfatto del risultato puoi finalmente incrementare la versione e "rilasciarlo".

Marcel Stör Marcel Stör
4 gen 2016 21:28:48

"rilascialo" agli utenti che stanno tornando sul sito. i nuovi utenti vedranno il contenuto fresco presente nel file.

ryanrain ryanrain
22 lug 2017 07:40:14
0
13

Quello che devi fare è deregistrare lo stile principale tramite il suo handle e poi registrarlo nuovamente con il tuo numero di versione. In questo caso l'handle è style-css.

Puoi determinare l'handle da utilizzare guardando il link del foglio di stile renderizzato:

<link rel='stylesheet' id='style-css-css'  href='http://site-url/wp-content/themes/child-theme/style.css?ver=4.6.1' type='text/css' media='all' />

Qui l'id è style-css-css il che significa che il nostro handle è style-css

Inserisci questo nel file function.php del tuo child-theme:

function wpse_145141_change_style_version(){
    // Prima deregistra il foglio di stile principale
    wp_deregister_style( 'style-css' );
    // Poi aggiungilo nuovamente, usando il tuo numero di versione personalizzato
    wp_register_style( 'style-css', get_stylesheet_uri(), array(), "VERSION_NUMBER" );
    // Infine eseguine nuovamente l'enqueue
    wp_enqueue_style( 'style-css');
}

add_action( 'wp_enqueue_scripts', 'wpse_145141_change_style_version');
28 mag 2014 11:49:04
9

Puoi aggiornare la versione direttamente nel foglio di stile del tema figlio...

/*
 Theme Name:   Twenty Fourteen Child
 Theme URI:    http://example.com/twenty-fourteen-child/
 Description:  Tema figlio di Twenty Fourteen
 Author:       John Doe
 Author URI:   http://example.com
 Template:     twentyfourteen
 Version:      1.1.2 <---- Aggiorna qui
*/
28 mag 2014 14:49:17
Commenti

Sei sicuro che questo svuoterà necessariamente qualsiasi foglio di stile memorizzato nella cache e forzerà il caricamento della nuova versione, proprio come quando si aggiunge un numero di versione in header.php?

drake035 drake035
30 mag 2014 13:35:36

Sì, se osservi il codice sorgente della pagina vedrai che la stringa di query viene aggiornata quando cambi il numero di versione nel file style.css del tuo tema child

Matt Royal Matt Royal
30 mag 2014 14:36:46

Fantastico. Ho avviato una ricompensa per questa domanda? Matt fammi sapere, se è così la avvierò di nuovo e te la assegnerò. Grazie!

drake035 drake035
10 giu 2014 14:59:06

@drake035 Sì, l'hai fatto. Sarebbe fantastico, grazie mille :-)

Matt Royal Matt Royal
10 giu 2014 16:37:39

Mi sono reso conto che ora posso solo avviare una bounty da 100, l'opzione da 50 è scomparsa dalla lista. 100 è un terzo della mia reputazione, un po' troppo... Mi dispiace davvero!

drake035 drake035
14 giu 2014 21:22:47

Funziona ancora? Per me, cambiare la versione nel file style.css del child theme non fa alcuna differenza - la query string di style.css nell'head continua a mostrare il numero di versione di Wordpress (in questo caso 4.1.1).

Tim Malone Tim Malone
17 apr 2015 11:24:13

Dipende da come è stato configurato il tuo tema. Guarda più in basso nella pagina la risposta di @kraftner. Se il tuo tema sta deregistrando e poi registrando nuovamente il file, allora questo non funzionerà.

Matt Royal Matt Royal
18 apr 2015 11:24:24

Ho dato un'altra occhiata e ora la versione predefinita si basa sulla versione di WP. Quindi questa risposta non è più valida! (https://github.com/WordPress/WordPress/blob/0fa23c1ac2f46ab79c186f4a295648f990758636/wp-includes/class.wp-styles.php#L32)

Matt Royal Matt Royal
18 apr 2015 11:39:01

@MattRoyal hai ragione, questo approccio non funziona più. Per favore modifica la tua risposta di conseguenza. È la risposta accettata, le persone proveranno questa soluzione e non funzionerà per loro.

panepeter panepeter
8 lug 2020 09:37:59
Mostra i restanti 4 commenti
0

La risposta attualmente più votata dipende dal tema, poiché richiede che lo sviluppatore del tema abbia reso quella versione del tema figlio una variabile e poi l'abbia aggiunta al file child style.css quando lo carica. Ho visto questo approccio in alcuni temi, ma non in molti. Il metodo seguente funziona con qualsiasi tema che registri gli stili del tema figlio in functions.php - non funziona con la vecchia regola @import, che ormai non si vede quasi più.

Nel file functions.php del tema figlio, dovresti avere qualcosa di simile a questo:

// carica il foglio di stile del tema figlio

function wp_schools_enqueue_scripts() {
  wp_register_style( 'childstyle', get_stylesheet_directory_uri() . '/style.css'  );
  wp_enqueue_style( 'childstyle' );
}
add_action( 'wp_enqueue_scripts', 'wp_schools_enqueue_scripts', 11);

Se lo modifichi come segue, aggiungerà un timestamp come numero di versione ogni volta che il file viene salvato, permettendo a ogni modifica del foglio di stile di bypassare la cache locale:

 // carica il foglio di stile del tema figlio

 function wp_schools_enqueue_scripts() {
   wp_register_style( 
     'childstyle', 
     get_stylesheet_directory_uri() . '/style.css', 
     array(), 
     filemtime( get_stylesheet_directory() . '/style.css' ) 
   );
   wp_enqueue_style( 'childstyle' );
 }
 add_action( 'wp_enqueue_scripts', 'wp_schools_enqueue_scripts', 11);

Spero che questo sia utile a qualcuno. Io lo uso in ogni sito che gestisco attivamente.

28 dic 2018 21:06:01
0

Invece di usare il file style.css predefinito, solitamente utilizzo wp_enqueue_style nel functions.php del tema figlio o in un altro file php incluso. Quindi, avresti comunque il file style.css nel tema figlio con tutti i dettagli del tema figlio, ma poi puoi avere un file css separato nel tema figlio per lo stile effettivo del tema figlio (di solito lo metto in una directory assets/css all'interno del tema figlio). Questo ti permetterebbe anche di impostare la versione del CSS con il 4° parametro. Ad esempio:

function theme_name_child_scripts() {
    wp_enqueue_style( 'style-name', get_stylesheet_directory_uri() . '/assets/css/child-style.css', array(), '1.0.0', 'screen');
}

add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts' );

Puoi aggiungere una priorità all'azione se non viene caricata nell'ordine corretto o lavorare con il parametro di dipendenza in wp_enqueue_style sopra:

add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts', 20 );
27 mag 2014 20:30:55
0

Utilizza filemtime per versionare in base alle modifiche del file. Deregistra e ricarica lo stile.

  1. Cerca nel sorgente (ctrl + U) e trova l'ID CSS del tema figlio senza "-css". In questo caso è voyager-default

<link rel='stylesheet' id='voyager-default-css' href='/wp-content/themes/voyager-child-theme/style.css?1606484598' type='text/css' media='all' />

  1. Usa questo codice (fonte) ma sostituisci 'style' con la stringa trovata (qui 'voyager-default')

functions.php del tema figlio

function add_timestamp_to_childtheme_stylesheet() {
    wp_dequeue_style( 'style' );
    wp_deregister_style( 'style' );
    wp_enqueue_style('style', get_stylesheet_uri().'?'.filemtime(get_stylesheet_directory().'/style.css'), array(), null);
}
add_action( 'wp_print_styles', 'add_timestamp_to_childtheme_stylesheet' );
27 nov 2020 16:03:00
1

Credo che se utilizzi l'editor di temi di WordPress per modificare il foglio di stile del tuo child theme, aggiunga automaticamente un nuovo numero di versione ogni volta che salvi il file.

21 mag 2014 20:44:53
Commenti

Giusto, ma non utilizzo l'editor di WP per lavorare sui miei fogli di stile..

drake035 drake035
26 mag 2014 21:23:51