Come posso creare una versione del file CSS principale?

12 ago 2010, 01:44:13
Visualizzazioni: 22K
Voti: 8

Come posso istruire WordPress ad utilizzare un nome file diverso da 'styles.css' per il mio foglio di stile principale - ad esempio, styles-1.css? Vorrei farlo per scopi di versionamento e gestione della cache.

0
Tutte le risposte alla domanda 9
0
13

Questo potrebbe essere inappropriato, fammi sapere se ho tralasciato qualcosa.

Il quarto argomento di wp_enqueue_style() è il numero di versione del foglio di stile. Nel file functions.php del tuo tema:

function my_theme_styles() {
    // sostituisci "10" con il tuo numero di versione; incrementalo quando pubblichi modifiche
    wp_enqueue_style('my-theme-style', get_bloginfo('template_directory') . '/style.css', false, 10);
}
add_action('wp_print_styles', 'my_theme_styles');

Richiede che il tuo header.php includa wp_head(), che ovviamente stavi già facendo. ;)

Questo ti permette di impostare header di lunga scadenza per il tuo file CSS, e forzare i client a scaricare un nuovo file aggiornando il numero di versione. WP aggiungerà "?ver=N" all'URL del tuo file CSS.

12 ago 2010 04:58:30
4

Aggiungi questo nel file functions.php del tuo tema:

function my_cool_style_versioner( $style ){
  return str_replace( '/style.css', '/style-1.css', $style );
}

add_filter( 'stylesheet_uri', 'my_cool_style_versioner' );
12 ago 2010 02:07:31
Commenti

Presumibilmente, dovrei chiamare quella funzione da qualche parte... (e presumo che la / mancante sia un errore!)

Bobby Jack Bobby Jack
12 ago 2010 02:10:55

Sì, quella barra mancante era un errore, e ho aggiunto anche l'hook del filtro che dovrai usare.

John P Bloch John P Bloch
12 ago 2010 02:18:49

Inoltre, nota che man mano che incrementi la versione, il secondo argomento ('/style-1.css') cambierà, ma il primo ('/style.css') rimarrà sempre lo stesso.

John P Bloch John P Bloch
12 ago 2010 02:23:15

fantastico, dovremmo creare un plugin per questo!

ariefbayu ariefbayu
12 ago 2010 03:07:47
2

Il file style.css è obbligatorio per il tuo tema WordPress. È da lì che WordPress ottiene il nome del tema e le meta informazioni per il menu Aspetto >> Temi. Detto questo, in realtà non sei obbligato a utilizzare style.css nel tuo tema. Conosco diversi temi disponibili che non lo utilizzano, e io stesso lo uso solo in una manciata dei miei design personalizzati.

Nel file header.php basta inserire il seguente tag al posto del normale collegamento al foglio di stile:

<link rel="stylesheet" type="text/css" href="<?php bloginfo('stylesheet_directory'); ?>/style-1.css" />

Questo caricherà il tuo foglio di stile alternativo come foglio di stile della pagina e ignorerà completamente il normale style.css.

12 ago 2010 03:09:41
Commenti

Per chiarire, è NECESSARIO avere un file style.css nel tuo tema WordPress con il nome del tema specificato al suo interno. NON è necessario caricare quel file nel tuo file header.php.

Doug Doug
12 ago 2010 19:58:47

E non dovresti inserire i tuoi stili direttamente nei file del tema - usa invece wp_enqueue_style - è molto più comodo per i child theme e i plugin.

Krzysiek Dróżdż Krzysiek Dróżdż
11 dic 2013 22:58:53
0

EAMann ha ragione, non devi usare il file style.css per tutto il tuo CSS.

Per gestire il versioning del foglio di stile e altri file nel tuo tema puoi aggiungere questo al tuo file functions.php

function fileVersion($filename)
{
    // ottieni il percorso assoluto del file
    $pathToFile = TEMPLATEPATH.'/'.$filename;
    // verifica se il file esiste
    if (file_exists($pathToFile)) 
    {
        // restituisci l'ora dell'ultima modifica del file
        echo filemtime($pathToFile);
    }
    else
    {
        // segnala che il file non è stato trovato
        echo 'FileNonTrovato';
    }
}

E poi quando crei il link al tuo foglio di stile puoi fare così.

<link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo( 'stylesheet_url' ); ?>?v=<?php fileVersion('style.css'); ?>" />

In questo modo non devi aggiornare manualmente il numero di versione, ogni volta che il file viene modificato sul server la versione cambierà automaticamente a quel timestamp UNIX

12 ago 2010 12:44:49
0

Nota che non dovresti usare querystring per la versioning dei file (i proxy non li memorizzano nella cache).

Un metodo migliore sarebbe versionare i nomi dei file aggiungendo un numero come

  • style.123.css
  • style.124.css

Quindi il mio approccio è il seguente:

Redirect htaccess di Apache

Se stai usando HTML5 boilerplate con apache puoi trovare la seguente sezione nel file .htaccess:

# ------------------------------------------------------------------------------
# | Filename-based cache busting                                               |
# ------------------------------------------------------------------------------

# Se non stai usando un processo di build per gestire la revisione dei nomi dei file,
# potresti considerare di abilitare le seguenti direttive per indirizzare tutte
# le richieste come `/css/style.12345.css` a `/css/style.css`.

# Per capire perché questo è importante e una soluzione migliore di `*.css?v231`, leggi:
# http://stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring

<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpe?g|gif)$ $1.$3 [L]
</IfModule>

(Di solito devi prima abilitarlo, rimuovendo il commento dalle righe)

Theme functions.php

Volevo usare automaticamente la versione del mio tema per il foglio di stile, quindi ho creato il seguente codice:

Puoi aggiungere il seguente al tuo file functions.php del tema:

function my_theme_styles() {
    $my_theme = wp_get_theme();
    $version = str_replace('.','',$my_theme->get( 'Version' ));
    $stylesheet = get_bloginfo('stylesheet_directory').'/style.'.$version.'.css';
    wp_enqueue_style('my-main', $stylesheet, false, null);
}
add_action('wp_print_styles', 'my_theme_styles');

Nota che ho fornito null come versione invece di false, così WordPress non aggiunge la sua versione nella querystring.

Risultato

Questo produce un foglio di stile come il seguente per la versione 1.0.2 del tuo tema:

<link rel='stylesheet' id='maw-main-css'  href='http://www.example.com/wp-content/themes/my-theme/style.102.css' type='text/css' media='all' />

Dopo aver cambiato la versione del mio tema a 2.0.0 nel mio style.css produrrà il seguente output:

<link rel='stylesheet' id='maw-main-css'  href='http://www.example.com/wp-content/themes/my-theme/style.200.css' type='text/css' media='all' />

Note aggiuntive

Fai attenzione che se rimuovi semplicemente i punti dalla versione come ho fatto io, potresti avere problemi con versioni del tema come 1.2.23 e 1.22.3, poiché entrambe risultano in una versione senza punti di 1223.

Un metodo migliore sarebbe tenerne conto nel file .htaccess. Ad esempio potresti permettere underscore tra i numeri e sostituire i punti con essi.

Questo non è testato, ma dovrebbe funzionare:

.htaccess

# ------------------------------------------------------------------------------
# | Filename-based cache busting                                               |
# ------------------------------------------------------------------------------
<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+)\.([_\d]+)\.(js|css|png|jpe?g|gif)$ $1.$3 [L]
</IfModule>

functions.php

function my_theme_styles() {
    $my_theme = wp_get_theme();
    $version = str_replace('.','_',$my_theme->get( 'Version' ));
    $stylesheet = get_bloginfo('stylesheet_directory').'/style.'.$version.'.css';
    wp_enqueue_style('my-main', $stylesheet, false, null);
}
add_action('wp_print_styles', 'my_theme_styles');
6 mag 2014 14:18:47
0

Beh, potresti semplicemente usare style.css come il posto in cui richiami la versione che desideri. Basta inserire

@import url("style-1.css");

Poi, quando aggiorni una versione, modificalo in:

@import url("style-2.css");

Per quanto riguarda il salvataggio delle versioni, hai considerato l'uso di un sistema di controllo versione come Subversion o git? In questo modo puoi avere un registro completo del tuo foglio di stile. È possibile che non stia comprendendo appieno le ragioni alla base del tuo sistema di versioning.

12 ago 2010 05:27:49
2

Mi sono imbattuto in questa vecchia domanda e ho scoperto che tutte le risposte sembrano ormai obsolete.

Userei semplicemente la versione del tema come definita nella parte dell'intestazione del file style.css. Puoi ottenerla con wp_get_theme()->get( 'Version' )

function my_enqueue_styles() {
    wp_enqueue_style( 'my-theme-style', get_template_directory_uri() . '/style.css', false, wp_get_theme()->get( 'Version' ) );
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_styles' );

In questo modo, il numero di versione verrà automaticamente aggiunto all'URL come ?ver=#.## e l'URL cambierà non appena la versione del tema verrà incrementata in style.css.

5 nov 2016 13:55:05
Commenti

Ho una domanda. Qual è il motivo per dare priorità 40?

Shamsur Rahman Shamsur Rahman
5 nov 2016 14:13:53

Questo caso non richiede alcuna priorità specifica. Lo modificherò, grazie.

JHoffmann JHoffmann
5 nov 2016 18:07:00
0

In functions.php cambia

wp_enqueue_style( 'twentysixteen-style', get_stylesheet_uri();

con

wp_enqueue_style( 'twentysixteen-style', get_stylesheet_uri(), array(), $ver );

modifica $ver con qualsiasi valore, oppure time() per la modalità sviluppo.

8 dic 2016 23:18:20
3

Non sono sicuro se questo sia cambiato per WP3, quindi non ne sono del tutto certo, ma un modo è modificare direttamente il file php rilevante (non so se può essere fatto dalle pagine di Dashboard/Admin):

wp-folder/wp-content/themes/your-theme/

E aprire il file header.php. In questo file cerca questa riga:

<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" />

Per aggiungere una 'versione' al foglio di stile collegato (supponendo che tu voglia qualcosa come: stylesheetURL.css?version=2) modificala così:

<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>?version=2" type="text/css" media="screen" />

Questo è un po' inelegante, però, quindi se c'è un modo migliore mi piacerebbe saperlo anch'io =)


Ho riletto la tua domanda...

Per usare un foglio di stile diverso styles-1.css puoi modificare la riga (sopra) in:

<link rel="stylesheet" href="absolute/or/root-relative/path/to/styles-1.css" type="text/css" media="screen" />

(Sostanzialmente rimuovendo il <?php ... ?> e sostituendolo con un percorso regolare.)

12 ago 2010 02:07:17
Commenti

"Questo è un po' poco elegante, però" - sì, specialmente se voglio usare un file chiamato "style-1.css"! ;-)

Bobby Jack Bobby Jack
12 ago 2010 02:11:38

@Bobby Jack, concordo e +1 (anche se ho provato ad aggiungere un approccio altrettanto poco elegante per raggiungere il tuo obiettivo.) =/

David Thomas David Thomas
12 ago 2010 02:13:40

OK. Immagino fossi preoccupato che stylesheet_url potesse essere usato altrove, ma in realtà non c'è motivo, vero? C'è anche il fatto che sarebbe bello avere un meccanismo per automatizzare l'aggiornamento per usare sempre la versione più recente del file, ma ora sto solo iniziando a evidenziare le falle nella mia domanda :)

Bobby Jack Bobby Jack
12 ago 2010 02:27:07