Avisos
Vaciar todo

style.css: versionar para evitar la caché del navegador

7 Respuestas
2 Usuarios
0 Reactions
772 Visitas
daniel.martin.alonso@gmail.com
Respuestas: 67
Trusted Member
Topic starter
 

Hola,

Un problema común en WordPress es que modificas las hojas de estilo en el archivo style.css y tienes que indicarle al cliente que fuerce el refresco del navegador para recargar las hojas de estilo.

Una forma de evitarlo es añadir un parámetro de versión al style.css de forma que cambie dicha versión cuando se hagan cambios. He encontrado un snippet a añadir en functions.php que lo hace a la perfección:

wp_enqueue_style( 'theme-styles', get_stylesheet_directory_uri() . '/style.css', array(), filemtime(get_stylesheet_directory() . '/style.css'));

Con este snippet, en el código fuente se ve algo similar a esto:

...wp-content/themes/nombre-theme/style.css?ver=1527693949

Mi problema es que en el código fuente veo que se está referenciando 2 veces el fichero style.css. Utilizo siempre Genesis con el child-theme correspondiente, y veo que Genesis carga por defecto el style.css. Por tanto, con el snippet anterior, se ve en el código fuente 2 líneas del tipo (la primera de Genesis y la segunda del snippet):

...wp-content/themes/enterprise-pro/style.css?ver=2.1.1
...
...wp-content/themes/enterprise-pro/style.css?ver=1527693949

Pregunta: ¿cómo puedo hacer para evitar esto? O si sabéis otra forma de evitar la caché de los navegadores, bienvenida sea...

Gracias de antemano,
Daniel.

URL del sitio: Contenido solo visible a usuarios registrados


 
Respondido : 30/05/2018 5:41 pm
Jhon
 Jhon
Respuestas: 44989
Illustrious Member Moderator
 

Hola

Lo que sucede es que con el código que has agregado estas poniendo nuevamente en cola el style.css
Lo correcto sería quitar de cola el que te poner por defecto Genesis primero.

Lo puedes hacer con : https://codex.wordpress.org/Function_Reference/wp_dequeue_style , tendrías que saber el handle o identificador con el que se ha registrado.

Sin embargo si quieres refrescar los estilos de un theme Genesis revisa en tu child theme en el archivo functions.php si tienes una constante CHILD_THEME_VERSION , simplemente cambia el valor y con eso tendrías el refresco, revisa:

https://decodecms.com/refrescar-los-estilos-css-almacenados-en-el-navegador-de-un-usuario/

Saludos.


 
Respondido : 30/05/2018 6:00 pm
daniel.martin.alonso@gmail.com
Respuestas: 67
Trusted Member
Topic starter
 

Hola Jhon,

Efectivamente, hay una constante como indicabas. Concretamente:

define( 'CHILD_THEME_VERSION', '2.1.1' );

¿Sería posible definir la constante con el valor de una función, de forma que se genere dinámicamente?

Por ejemplo, algo como:

define( 'CHILD_THEME_VERSION',  filemtime(get_stylesheet_directory() . '/style.css') );

De esta forma, la versión dependería de la fecha de creación del archivo, y no habría que hacerlo manualmente.

¿Hay forma de hacer esto?

Saludos,
Daniel.


 
Respondido : 30/05/2018 6:08 pm
daniel.martin.alonso@gmail.com
Respuestas: 67
Trusted Member
Topic starter
 

Retiro la pregunta.

Lo he probado tal cual y funciona perfectamente.

Para quien utilice Genesis:

define( 'CHILD_THEME_VERSION',  filemtime(get_stylesheet_directory() . '/style.css') );

Saludos y gracias por la ayuda.


 
Respondido : 30/05/2018 6:15 pm
Jhon
 Jhon
Respuestas: 44989
Illustrious Member Moderator
 

Hola

Que bueno que lo solucionaste.
Aunque te sugiero probar hacer una modificación y ver si el valor efectivamente cambia.

Saludos.


 
Respondido : 30/05/2018 6:19 pm
daniel.martin.alonso@gmail.com
Respuestas: 67
Trusted Member
Topic starter
 

Probado y funciona perfecto, puesto que como versión se utiliza "filemtime" que devuelve (en tiempo UNIX) la fecha de última modificación.

Saludos,
Daniel.


 
Respondido : 30/05/2018 6:21 pm
Jhon
 Jhon
Respuestas: 44989
Illustrious Member Moderator
 

Hola

Gracias por el aporte.

Saludos.


 
Respondido : 30/05/2018 6:24 pm