¿Cómo puedo versionar el archivo CSS principal?
Esto puede ser inapropiado, por favor házmelo saber si me he olvidado de algo.
El cuarto argumento de wp_enqueue_style()
es el número de versión de la hoja de estilos. En el archivo functions.php
de tu tema:
function my_theme_styles() {
// reemplaza "10" con tu número de versión; incrementa según hagas cambios
wp_enqueue_style('my-theme-style', get_bloginfo('template_directory') . '/style.css', false, 10);
}
add_action('wp_print_styles', 'my_theme_styles');
Requiere que tu header.php
incluya wp_head()
, lo cual por supuesto ya estabas haciendo. ;)
Esto te permite configurar cabeceras de larga expiración para tu archivo CSS, y forzar a los clientes a descargar un nuevo archivo actualizando el número de versión. WP añadirá "?ver=N" a la URL de tu archivo CSS.

Presumiblemente, necesitaría llamar a esa función desde algún lugar... (y supongo que la falta de / fue un error).

Sí, esa barra faltante fue un error, y también agregué el gancho de filtro que necesitarás usar.

Además, ten en cuenta que a medida que incrementas la versión, el segundo argumento ('/style-1.css'
) cambiará, pero el primero ('/style.css'
) siempre permanecerá igual.

El archivo style.css
es obligatorio para tu tema de WordPress. Es donde WordPress obtiene el nombre del tema y la información meta para el menú Apariencia >> Temas. Dicho esto, en realidad no necesitas usar style.css
en tu tema. Conozco varios temas disponibles que no lo usan, y solo lo utilizo en algunos de mis diseños personalizados.
En header.php
simplemente coloca la siguiente etiqueta en lugar del enlace habitual a la hoja de estilos:
<link rel="stylesheet" type="text/css" href="<?php bloginfo('stylesheet_directory'); ?>/style-1.css" />
Esto cargará tu hoja de estilos alternativa como la hoja de estilos de la página e ignorará completamente el archivo style.css
regular.

Solo para aclarar, DEBES tener un archivo style.css en tu tema de WordPress con el nombre del tema incluido. NO es necesario que cargues ese archivo en tu archivo header.php.

EAMann tiene razón, no tienes que usar el archivo style.css
para todo tu CSS.
Para versionar la hoja de estilos y otros archivos en tu tema puedes agregar esto a tu archivo functions.php
function fileVersion($filename)
{
// obtener la ruta absoluta al archivo
$pathToFile = TEMPLATEPATH.'/'.$filename;
// verificar si el archivo existe
if (file_exists($pathToFile))
{
// devolver el momento en que el archivo fue modificado por última vez
echo filemtime($pathToFile);
}
else
{
// indicar que el archivo no se encontró
echo 'ArchivoNoEncontrado';
}
}
Y luego cuando crees el enlace a tu hoja de estilos puedes hacer esto:
<link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo( 'stylesheet_url' ); ?>?v=<?php fileVersion('style.css'); ?>" />
De esta manera no tendrás que actualizar manualmente el número de versión, cada vez que el archivo se actualice en el servidor la versión cambiará automáticamente a ese timestamp UNIX

Nota que no deberías usar cadenas de consulta para el versionado de archivos (los proxies no los almacenan en caché).
Una mejor forma sería versionar los nombres de los archivos añadiendo un número como:
- style.123.css
- style.124.css
Así que mi enfoque es el siguiente:
Redirecciones en htaccess de Apache
Si estás usando HTML5 boilerplate con Apache puedes encontrar la siguiente sección en el archivo .htaccess:
# ------------------------------------------------------------------------------
# | Filename-based cache busting |
# ------------------------------------------------------------------------------
# Si no estás usando un proceso de compilación para gestionar el versionado de nombres de archivo,
# quizá quieras considerar habilitar las siguientes directivas para redirigir todas
# las solicitudes como `/css/style.12345.css` a `/css/style.css`.
# Para entender por qué esto es importante y mejor idea que `*.css?v231`, lee:
# 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>
(Normalmente tienes que habilitarlo primero, descomentando las líneas)
Archivo functions.php del tema
Quería usar automáticamente la versión de mi tema para la hoja de estilos, así que implementé lo siguiente:
Puedes añadir esto al functions.php de tu 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 que he proporcionado null
como versión en lugar de false
, para que WordPress no añada su versión en la cadena de consulta.
Resultado
Esto genera una hoja de estilos como la siguiente para la versión 1.0.2 de tu 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' />
Después de cambiar mi tema a la versión 2.0.0 en mi style.css generaría lo siguiente:
<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' />
Notas adicionales
Ten cuidado, si simplemente eliminas los puntos de la versión como hice, podrías tener problemas con versiones de tema como 1.2.23 y 1.22.3, ya que ambas resultarían en una versión sin puntos de 1223.
Una mejor forma sería tenerlo en cuenta en el archivo .htaccess. Por ejemplo podrías permitir guiones bajos entre los números y reemplazar los puntos con ellos.
Esto no está probado, pero debería funcionar:
.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');

Bueno, podrías simplemente usar style.css
como el lugar donde llamas a la versión que deseas. Simplemente coloca
@import url("style-1.css");
Luego, cuando actualices a una nueva versión, solo edítalo para que sea:
@import url("style-2.css");
En cuanto a guardar versiones, ¿has considerado usar un sistema de control de versiones como Subversion o git? Así podrás tener un registro completo de tu hoja de estilos. Es posible que no esté entendiendo completamente los motivos detrás de tu sistema de versionado.

Me encontré con esta antigua pregunta y encontré que todas las respuestas parecen estar desactualizadas hoy en día.
Simplemente usaría la versión del tema como está definida en la parte del encabezado del archivo style.css. Puedes obtenerla 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' );
De esta manera, el número de versión se añadirá automáticamente a la URL como ?ver=#.##
y la URL cambiará tan pronto como se incremente la versión del tema en style.css.

No estoy seguro si esto ha cambiado para WP3, así que no estoy completamente seguro, pero una forma es editar directamente el archivo php relevante (no sé si se puede hacer desde el Panel de control/Páginas de administración):
wp-folder/wp-content/themes/tu-tema/
Y abrir el archivo header.php
. En este archivo busca esta línea:
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" />
Para añadir una 'versión' a la hoja de estilos enlazada (asumiendo que quieres que sea algo como: stylesheetURL.css?version=2
) cámbiala a:
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>?version=2" type="text/css" media="screen" />
Esto es un poco poco elegante, así que si hay una mejor manera, me encantaría saberla yo también =)
Acabo de releer tu pregunta...
Para usar una hoja de estilos diferente styles-1.css
puedes cambiar la línea (anterior) a:
<link rel="stylesheet" href="ruta/absoluta/o/relativa/al/raiz/styles-1.css" type="text/css" media="screen" />
(Básicamente eliminando el <?php ... ?>
y reemplazándolo con una ruta normal.)

"Esto es un poco poco elegante, la verdad" - ¡sí, especialmente si quiero usar un archivo llamado "style-1.css"! ;-)

@Bobby Jack, estoy de acuerdo y +1 (aunque intenté añadir un enfoque igualmente poco elegante para lograr tu objetivo). =/

Vale. Supongo que me preocupaba que stylesheet_url pudiera usarse en otro lugar, pero realmente no hay razón para ello, ¿no? También está el hecho de que sería bueno tener algún mecanismo para automatizar la actualización y usar siempre la versión más reciente del archivo, pero ahora solo estoy empezando a exponer fallos en mi pregunta :)
