Asignar un número de versión a la hoja de estilos principal de un tema hijo

21 may 2014, 20:23:29
Vistas: 28.3K
Votos: 16

En header.php, me gusta asignar un número de versión a la hoja de estilos para que el navegador se vea forzado a actualizarla. Pero cuando trabajo con un tema hijo, su hoja de estilos no se llama explícitamente, sino que WordPress la busca automáticamente. Entonces, ¿cómo o dónde asignar un número de versión a la hoja de estilos del tema hijo?

0
Todas las respuestas a la pregunta 7
4
17

Creo que la mejor forma de hacer esto es dejar la hoja de estilos del tema hijo (style.css) vacía con solo los comentarios necesarios (como el nombre del tema, descripción, etc., para que WordPress pueda reconocer tu tema) y luego crear otro archivo CSS en tu-carpeta-del-tema/css/main.css

Después, en functions.php puedes tener una nueva "versión" cada vez que cambies tu archivo:

function my_scripts_and_styles(){

$cache_buster = date("YmdHi", filemtime( get_stylesheet_directory() . '/css/main.css'));
wp_enqueue_style( 'main', get_stylesheet_directory_uri() . '/css/main.css', array(), $cache_buster, 'all' );

}

add_action( 'wp_enqueue_scripts', 'my_scripts_and_styles', 1);

La lógica:

Cada vez que guardas el archivo, el tiempo de modificación del archivo cambia. El nuevo tiempo se pasa a la función date para convertir el tiempo (filemtime devuelve un entero que representa el tiempo) a formato de fecha para convertirlo en una cadena con el formato deseado. En nuestro ejemplo, el tiempo se formatea con precisión de minutos. Puedes cambiarlo para rastrear incluso segundos como "YmdHis". Después, el nuevo tiempo de modificación del archivo se pasa como nueva versión a wp_enqueue_style.

Referencia:

http://www.php.net/filemtime

http://php.net/manual/en/function.date.php

1 jun 2014 14:24:56
Comentarios

Prefiero usar la versión del tema como rompecache. Si usas $cache_buster = wp_get_theme()->get('Version') obtendrás la versión especificada en el bloque de comentarios en style.css. Consulta https://codex.wordpress.org/Function_Reference/wp_get_theme como referencia.

Marcel Stör Marcel Stör
2 ene 2016 16:45:03

Interesante, no conocía la existencia de esta función. Pero nuevamente tienes que cambiar manualmente la versión cada vez que haces un cambio y puede ser frustrante especialmente durante el desarrollo (dados los problemas de caché). Además, estás obligado a codificar en style.css incluso si importas tu archivo main.css allí, lo cual, por cierto, no considero un buen enfoque. Más aún, si programas en SASS puede ser nuevamente difícil de mantener. Finalmente, creo que es más rápido verificar la fecha del archivo que abrir el archivo, leer los primeros comentarios y encontrar la versión (no estoy seguro si wp_get_theme()->get('Version') funciona de esa manera).

Laxmana Laxmana
4 ene 2016 21:18:45

Cierto, pero por el lado positivo obtienes un mejor control sobre tus estilos. Puedes actualizar el CSS incrementalmente y cuando estés satisfecho con el resultado, finalmente puedes incrementar la versión y "lanzarlo".

Marcel Stör Marcel Stör
4 ene 2016 21:28:48

"liberarlo" a los usuarios que regresan al sitio. Los nuevos usuarios ven el contenido fresco que esté en el archivo.

ryanrain ryanrain
22 jul 2017 07:40:14
0
13

Lo que necesitas hacer es desregistrar el estilo principal por su handle y luego volver a registrarlo con tu número de versión. En este caso, el handle es style-css.

Puedes determinar el handle que necesitas usar mirando el enlace de la hoja de estilo renderizada:

<link rel='stylesheet' id='style-css-css'  href='http://site-url/wp-content/themes/child-theme/style.css?ver=4.6.1' type='text/css' media='all' />

Aquí el ID es style-css-css lo que significa que nuestro handle es style-css

Coloca esto en el functions.php de tu child-theme:

function wpse_145141_change_style_version(){
    // Primero desregistra la hoja de estilo principal
    wp_deregister_style( 'style-css' );
    // Luego agrégala nuevamente, usando tu número de versión personalizado
    wp_register_style( 'style-css', get_stylesheet_uri(), array(), "VERSION_NUMBER" );
    // Finalmente vuelve a encolarla
    wp_enqueue_style( 'style-css');
}

add_action( 'wp_enqueue_scripts', 'wpse_145141_change_style_version');
28 may 2014 11:49:04
9

Puedes actualizar la versión en la hoja de estilos del tema hijo directamente...

/*
 Theme Name:   Twenty Fourteen Child
 Theme URI:    http://example.com/twenty-fourteen-child/
 Description:  Tema hijo de Twenty Fourteen
 Author:       John Doe
 Author URI:   http://example.com
 Template:     twentyfourteen
 Version:      1.1.2 <---- Actualizar aquí
*/
28 may 2014 14:49:17
Comentarios

¿Estás seguro de que esto necesariamente eliminará cualquier hoja de estilo en caché y forzará la carga de la nueva versión, igual que cuando se añade un número de versión en header.php?

drake035 drake035
30 may 2014 13:35:36

Sí, si miras el código fuente de la página verás que la cadena de consulta se actualiza a medida que cambias el número de versión dentro del style.css de tu tema hijo.

Matt Royal Matt Royal
30 may 2014 14:36:46

Increíble. ¿Inicié una recompensa para esta pregunta? Matt, házmelo saber, si es así, la iniciaré de nuevo y te la otorgaré. ¡Gracias!

drake035 drake035
10 jun 2014 14:59:06

@drake035 Sí, lo hiciste. Eso sería genial, gracias hermano :-)

Matt Royal Matt Royal
10 jun 2014 16:37:39

Me doy cuenta de que solo puedo iniciar una recompensa de 100 ahora, la opción de 50 desapareció de la lista. 100 es un tercio de mi reputación, es un poco demasiado... ¡Realmente lo siento!

drake035 drake035
14 jun 2014 21:22:47

¿Esto todavía funciona? Para mí, cambiar la versión en el style.css del tema hijo no hace diferencia - el query string de style.css en el head sigue mostrando el número de versión de Wordpress (en este caso 4.1.1).

Tim Malone Tim Malone
17 abr 2015 11:24:13

Depende de cómo esté configurado tu tema. Mira más abajo en la página la respuesta de @kraftner. Si tu tema está desregistrando y luego volviendo a registrar el archivo, esto no funcionará.

Matt Royal Matt Royal
18 abr 2015 11:24:24

Volví a revisar y la versión predeterminada ahora se basa en la versión de WP. ¡Así que esta respuesta ya no es válida! (https://github.com/WordPress/WordPress/blob/0fa23c1ac2f46ab79c186f4a295648f990758636/wp-includes/class.wp-styles.php#L32)

Matt Royal Matt Royal
18 abr 2015 11:39:01

@MattRoyal tienes razón, este enfoque ya no funciona. Por favor ajusta tu respuesta acordemente. Es la respuesta aceptada, la gente intentará esto y no les funcionará.

panepeter panepeter
8 jul 2020 09:37:59
Mostrar los 4 comentarios restantes
0

La respuesta principal actual depende del tema, ya que requiere que el desarrollador del tema haya convertido el número de versión del tema hijo en una variable y luego lo haya añadido al style.css del hijo al ponerlo en cola. He visto esto en algunos temas, pero no en muchos. Lo siguiente funciona en cualquier tema que registre los estilos del hijo en functions.php - no funcionará con la antigua regla @import, que ya no veo mucho.

En el functions.php del tema hijo, deberías tener algo similar a esto:

// poner en cola la hoja de estilos del tema hijo

function wp_schools_enqueue_scripts() {
  wp_register_style( 'childstyle', get_stylesheet_directory_uri() . '/style.css'  );
  wp_enqueue_style( 'childstyle' );
}
add_action( 'wp_enqueue_scripts', 'wp_schools_enqueue_scripts', 11);

Si lo cambias a lo siguiente, añadirá una marca de tiempo como número de versión cada vez que se guarde el archivo, permitiendo que cada cambio de la hoja de estilos rompa la caché local:

// poner en cola la hoja de estilos del tema hijo

function wp_schools_enqueue_scripts() {
  wp_register_style( 
    'childstyle', 
    get_stylesheet_directory_uri() . '/style.css', 
    array(), 
    filemtime( get_stylesheet_directory() . '/style.css' ) 
  );
  wp_enqueue_style( 'childstyle' );
}
add_action( 'wp_enqueue_scripts', 'wp_schools_enqueue_scripts', 11);

Espero que esto ayude a alguien. Yo uso esto en cada sitio que gestiono activamente.

28 dic 2018 21:06:01
0

En lugar de usar el style.css predeterminado, normalmente uso wp_enqueue_style en el functions.php del tema hijo o en otro archivo php incluido. Así, todavía tendrías el style.css en el tema hijo con todos los detalles del tema hijo, pero luego puedes tener un archivo css separado en el tema hijo para los estilos reales del tema hijo (yo suelo poner esto en un directorio assets/css dentro del tema hijo). Esto también te permitiría establecer la versión del CSS con el cuarto parámetro. Por ejemplo:

function theme_name_child_scripts() {
    wp_enqueue_style( 'style-name', get_stylesheet_directory_uri() . '/assets/css/child-style.css', array(), '1.0.0', 'screen');
}

add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts' );

Puedes agregar una prioridad a la acción si no se carga en el orden correcto o trabajar con el parámetro de dependencia en wp_enqueue_style anterior:

add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts', 20 );
27 may 2014 20:30:55
0

Usa filemtime para versionar por cambio de archivo. Desregistrar y encolar el estilo.

  1. Busca en el código fuente (ctrl + U) y encuentra el ID CSS del tema hijo sin "-css". Aquí es voyager-default

<link rel='stylesheet' id='voyager-default-css' href='/wp-content/themes/voyager-child-theme/style.css?1606484598' type='text/css' media='all' />

  1. Usa este código (fuente) pero reemplaza 'style' por la cadena encontrada (aquí 'voyager-default')

functions.php del tema hijo

function add_timestamp_to_childtheme_stylesheet() {
    wp_dequeue_style( 'style' );
    wp_deregister_style( 'style' );
    wp_enqueue_style('style', get_stylesheet_uri().'?'.filemtime(get_stylesheet_directory().'/style.css'), array(), null);
}
add_action( 'wp_print_styles', 'add_timestamp_to_childtheme_stylesheet' );
27 nov 2020 16:03:00
1

Creo que si utilizas el editor de temas de WordPress para editar la hoja de estilos de tu tema hijo, automáticamente añade un nuevo número de versión cada vez que guardas el archivo.

21 may 2014 20:44:53
Comentarios

Correcto, pero yo no uso el editor de WP para trabajar en mis hojas de estilo...

drake035 drake035
26 may 2014 21:23:51