Atribuir un número de versión a la hoja de estilo principal de un tema secundario

11

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

drake035
fuente

Respuestas:

5

Puede actualizar la versión en la propia hoja de estilo de temas secundarios ...

/*
 Theme Name:   Twenty Fourteen Child
 Theme URI:    http://example.com/twenty-fourteen-child/
 Description:  Twenty Fourteen Child Theme
 Author:       John Doe
 Author URI:   http://example.com
 Template:     twentyfourteen
 Version:      1.1.2 <---- Update here
*/
Matt Royal
fuente
¿Está seguro de que esto necesariamente vaciará cualquier hoja de estilo en caché y forzará a cargar la nueva versión, al igual que al agregar un número de versión en header.php?
drake035
Sí, si observa el origen de la página, verá la cadena de consulta actualizada a medida que cambia el número de versión dentro de los temas de su estilo style.css
Matt Royal
77
¿Esto todavía funciona? Para mí, cambiar la versión en el style.css del tema secundario no hace ninguna diferencia: la cadena de consulta style.css en la cabeza todavía aparece como el número de versión de Wordpress (en este caso 4.1.1).
Tim Malone
2
Depende de cómo se haya configurado su tema. Mira hacia abajo la página @kraftner respuesta. Si su tema es cancelar el registro y luego volver a registrar el archivo, entonces esto no funcionará.
Matt Royal
44
Echó otro vistazo y la versión predeterminada ahora se basa en la versión WP. ¡Entonces esta respuesta ya no es válida! ( github.com/WordPress/WordPress/blob/… )
Matt Royal
13

Creo que la mejor manera de hacerlo es dejar vacía la hoja de estilo del tema secundario (style.css) con solo los comentarios necesarios (como el nombre del tema, la descripción, etc., para que WordPress reconozca su tema) y luego cree otro archivo css en su- theme-name-folder / css / main.css

Después de eso en function.php puede tener una nueva "versión" cada vez que cambie su 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 guarda el archivo, se modifica el tiempo modificado del archivo. La nueva hora se está pasando a la función de fecha para convertir la hora (filemtime devuelve un número entero que representa la hora) al formato de fecha para convertirla en una cadena en el formato que desee. En nuestro ejemplo, el tiempo se formatea con precisión de minutos. Puede cambiarlo para rastrear incluso el segundo, es decir. "YmdHis"Después de eso, el nuevo tiempo modificado del archivo se pasa como una nueva versión wp_enqueue_style.

Referencia:

http://www.php.net/filemtime

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

Laxmana
fuente
2
Prefiero usar la versión del tema como buster de caché. Si lo usa $cache_buster = wp_get_theme()->get('Version'), obtendrá la versión especificada en el bloque de comentarios style.css. Ver codex.wordpress.org/Function_Reference/wp_get_theme para referencia.
Marcel Stör
Nice no sabía la existencia de esta función. Pero, de nuevo, debe cambiar manualmente la versión cada vez que realiza un cambio y puede frustrarse, especialmente cuando se desarrolla (problemas de caché dados). También está obligado a codificar en style.css incluso si importa su archivo main.css allí, por cierto, no me parece un buen enfoque. Además, si codifica en SASS puede volver a ser difícil mantenerlo. Finalmente, creo que es más rápido verificar el tiempo 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
Es cierto, pero en el lado positivo obtienes un mejor control sobre tus estilos. Puede actualizar el CSS de forma incremental y cuando esté satisfecho con el resultado, finalmente puede modificar la versión y "liberarla".
Marcel Stör
1
"liberarlo" a los usuarios que regresan al sitio. Los nuevos usuarios ven lo que hay en el archivo.
ryanrain
10

Lo que debe hacer es cancelar el registro del estilo principal por medio de un identificador y luego volver a registrarse con su número de versión. En este caso el mango es style-css.

Puede determinar el identificador que necesita usar mirando el enlace de la hoja de estilo representada:

<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í la identificación es lo style-css-cssque significa que nuestro identificador esstyle-css

Pon esto en la función.php de tu tema hijo:

function wpse_145141_change_style_version(){
    // First de-register the main stylesheet
    wp_deregister_style( 'style-css' );
    // Then add it again, using your custom version number
    wp_register_style( 'style-css', get_stylesheet_uri(), array(), "VERSION_NUMBER" );
    //finally enqueue it again
    wp_enqueue_style( 'style-css');
}

add_action( 'wp_enqueue_scripts', 'wpse_145141_change_style_version');
Kraftner
fuente
1

La respuesta principal actual depende del tema, ya que requiere que el desarrollador del tema haya convertido ese número de versión del tema secundario en una variable y luego lo haya agregado al estilo secundario. He visto esto en algunos temas, pero no en muchos. Lo siguiente funciona en cualquier tema que registre los estilos secundarios en functions.php: no funcionará con la antigua regla @import, que no he visto mucho más.

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

// enqueue the child theme stylesheet

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 cambia a lo siguiente, agregará 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 estilo se rompa a través del caché local:

 // enqueue the child theme stylesheet

 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. Lo uso en todos los sitios que administro activamente.

Jeff Travilla
fuente
0

Creo que si usa el editor de temas de Wordpress para editar la hoja de estilo de su tema secundario, automáticamente agrega un nuevo número de versión cada vez que guarda el archivo.

autogestión
fuente
1
Correcto, pero no utilizo el editor de WP para trabajar en mis hojas de estilo ...
drake035
0

En lugar de usar el estilo predeterminado.css, generalmente uso wp_enqueue_style en el archivo secundario functions.php u otro archivo php incluido. Por lo tanto, todavía tendría el style.css en el tema secundario con todos los detalles del tema secundario, pero luego puede tener un archivo css separado en el tema secundario para el estilo del tema secundario real (generalmente lo pongo en un activo / CSS directorio dentro del tema hijo). Esto también le permitiría configurar la versión 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' );

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

add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts', 20 );
Bjorn
fuente