WordPress : Thèmes enfants Problèmes de priorité CSS sans utiliser !important

Publié par Jean-Michel le

J’ai changé mon site WordPress pour utiliser des thèmes enfants, mais le style du thème parent a priorité sur toute modification que j’apporte au CSS du thème enfant. Je peux contourner ce problème en utilisant !important, mais il s’agit d’une solution inégale et les thèmes enfants devraient fonctionner comme la première ressource du site.

Par exemple, sur mon site, la bordure qui inclut .wp-captionest de la même couleur que l’arrière-plan à l’aide de la !importantbalise, mais ne fonctionnera pas sans elle.

Cela a-t-il à voir avec le fichier functions.php ?

Voici le contenu de mon fichier PHP :

add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
function theme_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
}

Solution n°1 trouvée

Réponse TLDR : le premier paramètre de chacun wp_enqueue_style()ne doit pas être laissé en tant que « style parent » et « style enfant ». Ils doivent être renommés pour correspondre au nom du thème parent et de son enfant.

Lire également:  comment créer un content_width conditionnel pour un thème wordpress ?

Problème

Si vous ne renommez pas les paramètres, vous obtiendrez le thème enfant mis en file d’attente une deuxième fois, ce qui peut entraîner l’apparition de règles deux fois dans Firebug et la modification des valeurs dans le mauvais sans effet apparent, ce qui peut vous faire croire que vos règles enfants ne le font pas. t remplacer le parent.

L’attente

La page Codex sur les thèmes enfants indique correctement que si vous ne faites rien, le CSS enfant est automatiquement lié. Oui, mais seulement ça. Le workflow CSS est un peu différent : vous voulez remplacer, pas remplacer. C’est logique (ça marche comme les autres fichiers de thème) mais ils auraient pu avoir une note.

La solution

Renommez les paramètres. Je le fais comme ci-dessous pour avoir (un peu) plus de contrôle, notez que vous devez remplacer vingt -six et vingt-six-enfant par les noms de votre thème et thème enfant :

function theme_enqueue_scripts() {
    //FIRST
    wp_enqueue_style( 'twentysixteen-style', get_template_directory_uri() . '/style.css' );

    //...custom queueing of .js and .css for Javascript plugins and such here

    //LAST
    wp_enqueue_style( 'twentysixteen-child-style', get_stylesheet_directory_uri() . '/style.css', array( 'twentysixteen-style' ) );
}
add_action( 'wp_enqueue_scripts', 'theme_enqueue_scripts' );

(Notez également que vous ne contrôlez pas l’ordre des liens de certains (tous?) Plugins WP dans cette action. Ils sont liés après.)

Lire également:  Changer un site Web html en Wordpress et manquer le thème parent

Bonne chasse aux sélecteurs 😉

Solution n°2 trouvée

Essayez de mettre en file d’attente le CSS de votre thème enfant comme suit :

// Queue parent style followed by child/customized style
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles', PHP_INT_MAX);

function theme_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
    wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . '/styles/child-style.css', array( 'parent-style' ) );
}

Remarquez quelques points :

1) PHP_INT_MAX en priorité pour que cela s’exécute en dernier

2) get_stylesheet_directory_uri() contre get_template_directory_uri() qui pointera vers le dossier de modèles du thème enfant au lieu des parents.

J’y ai également ajouté un sous-dossier, /styles/car je conserve normalement mon CSS dans un sous-dossier de mon thème.

Lire également:  Wordpress : Manipuler la liste des thèmes dans wp-admin

3) suivi de array( 'parent-style' )pour que le CSS enfant ait le CSS parent comme dépendance, ce qui a pour effet de placer le thème parent en premier dans la tête et le CSS du thème enfant qui le suit. Pour cette raison, tout ce qui apparaît également dans le thème enfant qui est déjà dans le thème parent écrasera la version du thème parent.

Solution n°3 trouvée

Vous pouvez utiliser un sélecteur plus spécifique dans le CSS de votre thème enfant afin qu’il soit prioritaire.

Donc au lieu de :

.wp-légende {
     arrière-plan : #2d2d2d !important ;
}

Utilisation:

.entrée .wp-légende {
     arrière-plan : #2d2d2d ;
}

Vous voudrez également vous assurer de mettre en file d’attente votre feuille de style de thème enfant dans votre fichier functions.php si vous ne l’êtes pas déjà.

http://codex.wordpress.org/Function_Reference/wp_enqueue_style

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 *