Attribuer un numéro de version à la feuille de style principale d'un thème enfant

11

Dans header.php, j'aime attribuer un numéro de version à la feuille de style afin que le navigateur soit obligé de le rafraîchir. Mais lorsque vous travaillez avec un thème enfant, sa feuille de style n'est pas explicitement appelée, mais WordPress le recherche automatiquement. Alors, comment ou où attribuer un numéro de version à la feuille de style du thème enfant?

drake035
la source

Réponses:

5

Vous pouvez mettre à jour la version dans la feuille de style des thèmes enfants elle-même ...

/*
 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
la source
Êtes-vous certain que cela videra nécessairement toute feuille de style mise en cache et forcera le chargement de la nouvelle version, tout comme lors de l'ajout d'un numéro de version dans header.php?
drake035
Oui, si vous regardez la source de la page, vous verrez la chaîne de requête mise à jour lorsque vous modifiez le numéro de version dans vos thèmes enfants style.css
Matt Royal
7
Est-ce que cela fonctionne toujours? Pour moi, changer la version dans le style.css du thème enfant ne fait aucune différence - la chaîne de requête style.css dans la tête sort toujours sous le numéro de version Wordpress (dans ce cas 4.1.1).
Tim Malone
2
Cela dépend de la façon dont votre thème a été configuré. Regardez la réponse de la page @kraftner. Si votre thème désenregistre puis réenregistre le fichier, cela ne fonctionnera pas.
Matt Royal
4
A pris un autre look et la version par défaut est désormais basée sur la version WP. Cette réponse n'est donc plus valable! ( github.com/WordPress/WordPress/blob/… )
Matt Royal
13

Je pense que la meilleure façon de le faire est de laisser la feuille de style du thème enfant (style.css) vide avec seulement les commentaires nécessaires (comme le nom du thème, la description, etc., donc wordpress peut reconnaître votre thème), puis de créer un autre fichier css dans votre- dossier-nom-thème / css / main.css

Après cela sur function.php, vous pouvez avoir une nouvelle "version" à chaque fois que vous changez votre fichier:

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

Chaque fois que vous enregistrez le fichier, l'heure modifiée du fichier est modifiée. La nouvelle heure est passée à la fonction date pour convertir l'heure (filemtime renvoie un entier représentant l'heure) au format date pour en faire une chaîne au format souhaité. Dans notre exemple, l'heure est formatée avec une précision de minutes. Vous pouvez le changer pour suivre même la seconde, c'est-à-dire "YmdHis". Après cela, la nouvelle heure modifiée du fichier est transmise en tant que nouvelle version à wp_enqueue_style.

Référence :

http://www.php.net/filemtime

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

Laxmana
la source
2
Je préfère utiliser la version thématique comme cache buster. Si vous utilisez, $cache_buster = wp_get_theme()->get('Version')vous obtiendrez la version spécifiée dans le bloc de commentaires dans style.css. Voir codex.wordpress.org/Function_Reference/wp_get_theme pour référence.
Marcel Stör
Nice ne connaissait pas l'existence de cette fonction. Mais encore une fois, vous devez changer manuellement la version à chaque fois que vous effectuez un changement et cela peut être frustrant, surtout lors du développement (en raison de problèmes de cache). Vous êtes également obligé de coder dans style.css même si vous y importez votre fichier main.css, ce qui n'est pas une bonne approche. De plus, si vous codez dans SASS, il peut être à nouveau difficile de le maintenir. Enfin, je pense qu'il est plus rapide de vérifier l'heure du fichier que d'ouvrir le fichier, de lire les premiers commentaires et de trouver la version (je ne suis pas sûr que cela wp_get_theme()->get('Version')fonctionne de cette façon).
Laxmana
C'est vrai, mais du côté positif, vous obtenez un meilleur contrôle sur vos styles. Vous pouvez mettre à jour le CSS de manière incrémentielle et lorsque vous êtes satisfait du résultat, vous pouvez enfin bump la version et la "publier".
Marcel Stör
1
le «libérer» aux utilisateurs qui reviennent sur le site. les nouveaux utilisateurs voient tout ce qui se trouve dans le fichier.
ryanrain
10

Ce que vous devez faire est de désenregistrer le style principal par poignée, puis de vous réinscrire avec votre numéro de version. Dans ce cas, la poignée est style-css.

Vous pouvez déterminer le handle que vous devez utiliser en consultant le lien vers la feuille de style rendue:

<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' />

Ici, l'id est style-css-cssce qui signifie que notre poignée eststyle-css

Mettez ceci dans le function.php de votre thème enfant:

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
la source
1

La première réponse actuelle dépend du thème, car elle nécessite que le développeur du thème ait fait ce numéro de version du thème enfant dans une variable, puis l'ajouté au style.css enfant lors de sa mise en file d'attente. J'ai vu cela sur certains thèmes, mais pas beaucoup. Ce qui suit fonctionne sur n'importe quel thème qui enregistre les styles enfants dans functions.php - ne fonctionnera pas avec l'ancienne règle @import, que je n'ai plus beaucoup vue.

Dans functions.php du thème enfant, vous devriez avoir quelque chose de similaire à ceci:

// 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 vous le modifiez comme suit, il ajoutera un horodatage comme numéro de version à chaque enregistrement du fichier, permettant à chaque modification de la feuille de style de passer par le cache 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);

J'espère que cela aide quelqu'un. Je l'utilise sur tous les sites que je gère activement.

Jeff Travilla
la source
0

Je crois que si vous utilisez l'éditeur de thème Wordpress pour modifier la feuille de style de votre thème enfant, il ajoute automatiquement un nouveau numéro de version à chaque fois que vous enregistrez le fichier.

autoagence
la source
1
Bien mais je n'utilise pas l'éditeur WP pour travailler sur mes feuilles de style ..
drake035
0

Au lieu d'utiliser le style.css par défaut, j'utilise généralement wp_enqueue_style dans le fichier functions.php du thème enfant ou un autre fichier php inclus. Donc, vous auriez toujours le style.css dans le thème enfant avec tous les détails du thème enfant, mais vous pouvez alors avoir un fichier css séparé dans le thème enfant pour le style du thème enfant réel (je le mets généralement dans un actif / css dans le thème enfant). Cela vous permettrait également de définir la version CSS avec le 4ème paramètre. Par exemple:

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' );

Vous pouvez ajouter une priorité à l'action si elle ne se charge pas dans le bon ordre ou si vous travaillez avec le paramètre de dépendance dans wp_enqueue_style ci-dessus:

add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts', 20 );
Bjorn
la source