WordPress : Comment éviter de charger style.css deux fois dans le thème enfant ?

Publié par Jean-Michel le

J’ai vingt-sept enfants-thème, et j’ai trouvé ce code:

add_action( 'wp_enqueue_scripts', 'child_enqueue_styles',99);
function child_enqueue_styles() {
    $parent_style = 'parent-style';
    wp_enqueue_style( $parent_style, get_template_directory_uri() . '/style.css' );
     wp_enqueue_style( 'seventeen-child',get_stylesheet_directory_uri() . '/style.css', array( $parent_style ));
}
if ( get_stylesheet() !== get_template() ) {
    add_filter( 'pre_update_option_theme_mods_' . get_stylesheet(), function ( $value, $old_value ) {
         update_option( 'theme_mods_' . get_template(), $value );
         return $old_value; // prevent update to child theme mods
    }, 10, 2 );
    add_filter( 'pre_option_theme_mods_' . get_stylesheet(), function ( $default ) {
        return get_option( 'theme_mods_' . get_template(), $default );
    } );
}

..

Mais il y a un problème que style.css se charge deux fois. J’ai essayé le code de Reference WordPress, mais mes fichiers de remplacement comme footer.php, navigation.php de child-theme ne se chargent pas.

Quelqu’un pourrait-il m’aider à éviter de charger .css deux fois et à conserver toutes les fonctionnalités?

Lire également:  Wordpress : Utilisation de check_admin_referer avec les options de thème et options.php

Solution n°1 trouvée

Mais il y a un problème que style.css se charge deux fois.

Cette fonction met en child_enqueue_styles()file d’attente deux style.cssfichiers, l’un du thème parent et l’autre du thème enfant.

// This enqueues style.css from parent theme
wp_enqueue_style( $parent_style, get_template_directory_uri() . '/style.css' );

// This enqueues style.css from child theme 
wp_enqueue_style( 'seventeen-child',get_stylesheet_directory_uri() . '/style.css', array( $parent_style ));

C’est pourquoi deux style.cssfichiers sont chargés. Le thème enfant style.cssne doit contenir que votre personnalisation et ne doit pas être une copie du fichier du thème parent style.css.

Si vous êtes satisfait du style du thème parent et que vous souhaitez simplement remplacer certains fichiers de modèle, vous pouvez le supprimer de votre code pour charger uniquement le style du thème parent.

wp_enqueue_style( 'seventeen-child',get_stylesheet_directory_uri() . '/style.css', array( $parent_style ));

Solution n°2 trouvée

Vous n’avez généralement pas besoin de mettre en file d’attente la feuille de style d’un thème enfant. Le thème parent fait cela. C’est un peu déroutant, alors je vais vous expliquer.

Lire également:  ensemble d'outils pour la recommandation de développement de thèmes wordpress

Dans la plupart des thèmes, Twenty Seventeen inclus, la feuille de style est chargée comme ceci :

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

L’astuce pour comprendre ce qui se passe ici est de comprendre ce qui get_stylesheet_uri()se passe. Lorsqu’un thème normal est activé, cette fonction renvoie l’URL vers le fichier style.css du thème. Cependant, lorsqu’un thème enfant est activé, la fonction renvoie l’URL du fichier style.css du thème enfant .

Cela signifie que lorsque vous créez un thème enfant avec un fichier style.css, ce fichier sera automatiquement mis en file d’attente, mais pas celui du thème parent. Ainsi, tout ce que vous avez à faire dans votre thème enfant est de mettre en file d’attente la feuille de style du thème parent :

add_action( 'wp_enqueue_scripts', 'child_enqueue_styles', 9 );
function child_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_parent_theme_file_uri( 'style.css' ) );
}

Notez que j’ai défini la priorité sur 9. Cela signifie que la feuille de style du thème parent sera mise en file d’attente avant celle du thème enfant, qui sera mise en file d’attente avec la priorité par défaut de 10.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *