Attribuire un numero di versione al foglio di stile principale di un tema figlio


11

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

Risposte:


5

Puoi aggiornare la versione nel foglio di stile dei temi figlio stesso ...

/*
 Theme Name:   Twenty Fourteen Child
 Theme URI:    http://example.com/twenty-fourteen-child/
 Description:  Twenty Fourteen Child Theme
 Author:       John Doe
 Author URI:   http://example.com
 Template:     twentyfourteen
 Version:      1.1.2 <---- Update here
*/

Sei sicuro che questo eliminerà necessariamente qualsiasi foglio di stile memorizzato nella cache e importerà il caricamento della nuova versione, proprio come quando aggiungi un numero di versione in header.php?
drake035,

Sì, se guardi l'origine della pagina vedrai la stringa di query aggiornata mentre cambi il numero di versione all'interno dei temi child style.css
Matt Royal

7
Funziona ancora? Per me, cambiare la versione in style.css del tema figlio non fa alcuna differenza: la stringa di query style.css nella testina esce ancora come numero di versione di Wordpress (in questo caso 4.1.1).
Tim Malone,

2
Dipende da come è stato impostato il tema. Guarda in basso nella pagina @kraftner answer. Se il tuo tema sta annullando la registrazione e quindi ri-registrando il file, questo non funzionerà.
Matt Royal,

4
Diede un'altra occhiata e la versione predefinita ora si basa sulla versione WP. Quindi questa risposta non è più valida! ( github.com/WordPress/WordPress/blob/… )
Matt Royal

13

Penso che il modo migliore per farlo sia lasciare vuoto il foglio di stile del tema figlio (style.css) con solo i commenti necessari (come il nome del tema, la descrizione ecc., Quindi Wordpress può riconoscere il tuo tema) e quindi creare un altro file CSS nel tuo- theme-name-cartella / css / main.css

Dopodiché su 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 si salva il file, l'ora modificata del file viene modificata. La nuova ora viene passata alla funzione data per convertire l'ora (filemtime restituisce un numero intero che rappresenta l'ora) nel formato data per renderlo una stringa nel formato desiderato. Nel nostro esempio il tempo viene formattato con precisione dei minuti. Puoi cambiarlo per tracciare anche il secondo, ad es "YmdHis". Dopo che il nuovo tempo modificato del file viene passato come nuova versione a wp_enqueue_style.

Riferimento:

http://www.php.net/filemtime

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


2
Preferisco usare la versione del tema come cache buster. Se usi $cache_buster = wp_get_theme()->get('Version')otterrai la versione specificata nel blocco dei commenti in style.css. Vedi codex.wordpress.org/Function_Reference/wp_get_theme per riferimento.
Marcel Stör

Nice non sapeva l'esistenza di questa funzione. Ma ancora una volta devi cambiare manualmente la versione ogni volta che apporti una modifica e può essere frustrata soprattutto durante lo sviluppo (dati i problemi di cache). Inoltre sei obbligato a scrivere il codice in style.css anche se importi il ​​tuo file main.css lì, il che non lo trovo un buon approccio. Inoltre, se si codifica in SASS, può essere nuovamente difficile mantenerlo. Infine, penso che sia più veloce controllare il tempo del file piuttosto che aprirlo, leggere i primi commenti e trovare la versione (non sono sicuro wp_get_theme()->get('Version')che funzioni così).
Laxmana,

È vero, ma sul lato positivo ottieni un migliore controllo dei tuoi stili. Puoi aggiornare il CSS in modo incrementale e quando sei soddisfatto del risultato puoi finalmente eseguire il bump della versione e "rilasciarlo".
Marcel Stör

1
"rilasciarlo" per gli utenti che stanno tornando al sito. i nuovi utenti vedono nuovi contenuti nel file.
Ryanrain,

10

Quello che devi fare è annullare la registrazione dello stile principale tramite handle e quindi ripetere la registrazione con il numero di versione. In questo caso la maniglia è style-css.

Puoi determinare l'handle che devi usare guardando il link al 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-cssche significa che è la nostra manigliastyle-css

Inserisci questo nel function.php del tuo tema figlio:

function wpse_145141_change_style_version(){
    // First de-register the main stylesheet
    wp_deregister_style( 'style-css' );
    // Then add it again, using your custom version number
    wp_register_style( 'style-css', get_stylesheet_uri(), array(), "VERSION_NUMBER" );
    //finally enqueue it again
    wp_enqueue_style( 'style-css');
}

add_action( 'wp_enqueue_scripts', 'wpse_145141_change_style_version');

1

L'attuale risposta principale dipende dal tema, in quanto richiede che lo sviluppatore del tema abbia trasformato quel numero di versione del tema figlio in una variabile e quindi lo abbia aggiunto a style.css figlio quando lo accodava. L'ho visto su alcuni temi, ma non molti. Il seguente funziona su qualsiasi tema che registra gli stili figlio in funzioni.php - non funzionerà con la vecchia regola @import, che non ho più visto molto.

In Functions.php del tema figlio, dovresti avere qualcosa di simile a questo:

// enqueue the child theme stylesheet

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 si modifica nel modo seguente, verrà aggiunto un timestamp come numero di versione ogni volta che il file viene salvato, consentendo a ogni modifica del foglio di stile di passare attraverso la cache locale:

 // enqueue the child theme stylesheet

 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 aiuti qualcuno. Lo uso su tutti i siti che gestisco attivamente.


0

Credo che se usi l'editor di temi di Wordpress per modificare il foglio di stile del tuo tema figlio, questo aggiunge automaticamente un nuovo numero di versione ogni volta che salvi il file.


1
Giusto ma non uso l'editor WP per lavorare sui miei fogli di stile.
drake035

0

Invece di usare lo style.css predefinito, di solito uso wp_enqueue_style nelle funzioni.php del tema figlio o in un altro file php incluso. Quindi, avresti ancora 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 del tema figlio reale (di solito lo inserisco in un asset / css directory all'interno del tema figlio). Ciò consentirebbe anche di impostare la versione CSS con il 4o parametro. Per 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 funziona con il parametro di dipendenza in wp_enqueue_style sopra:

add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts', 20 );
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.