¿Cómo puedo versionar el archivo CSS principal?

12 ago 2010, 01:44:13
Vistas: 22K
Votos: 8

¿Cómo puedo indicarle a WordPress que use un nombre de archivo diferente a 'styles.css' para mi hoja de estilos principal - por ejemplo, styles-1.css? Me gustaría hacer esto con fines de versionado y caché.

0
Todas las respuestas a la pregunta 9
0
13

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.

12 ago 2010 04:58:30
4

Pega esto en el archivo functions.php de tu 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
Comentarios

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

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

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

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

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.

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

¡increíble, deberíamos crear un plugin para esto!

ariefbayu ariefbayu
12 ago 2010 03:07:47
2

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.

12 ago 2010 03:09:41
Comentarios

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.

Doug Doug
12 ago 2010 19:58:47

Y no deberías poner tus estilos directamente en los archivos del tema - usa wp_enqueue_style en su lugar - es mucho mejor para temas hijos y plugins.

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

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

12 ago 2010 12:44:49
0

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');
6 may 2014 14:18:47
0

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.

12 ago 2010 05:27:49
2

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.

5 nov 2016 13:55:05
Comentarios

Tengo una pregunta. ¿Cuál es la razón para dar prioridad 40?

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

Este caso no requiere ninguna prioridad específica. Lo editaré para quitarlo, gracias.

JHoffmann JHoffmann
5 nov 2016 18:07:00
0

En functions.php cambia

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

por

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

cambia $ver por cualquier valor, o time() para modo desarrollo.

8 dic 2016 23:18:20
3

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

12 ago 2010 02:07:17
Comentarios

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

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

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

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

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

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