Come posso creare una versione del file CSS principale?
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.

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

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

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.

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
.

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.

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

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');

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.

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.

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.)

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

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

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 :)
