Le WordPress d'aujourd'hui, décodé pour les développeurs

Thèmes

wp_enqueue_style et une dépendance oubliée : l’ordre qui casse un enfant

Un style d'un thème enfant qui semble ignoré n'est souvent qu'une question d'ordre de chargement mal déclaré. Symptôme, diagnostic et correctif détaillés.

Par WordPress Développement • 9 mars 2021 • 4 min de lecture • Aucun commentaire
wp_enqueue_style et une dépendance oubliée : l'ordre qui casse un enfant

« Ma règle CSS est bien écrite, mais elle ne s’applique pas » : ce constat revient régulièrement chez les développeurs qui débutent avec les thèmes enfants. Le code semble correct, la spécificité des sélecteurs paraît suffisante, et pourtant le style du parent continue à s’afficher. Le coupable, dans une large majorité des cas, n’est ni une erreur de syntaxe ni un problème de spécificité : c’est l’ordre de chargement des feuilles de style.

Symptôme

Un développeur crée un thème enfant, copie style.css, y ajoute une règle qui modifie la couleur d’un titre déjà stylée dans le thème parent. À l’affichage, rien ne change : la couleur reste celle définie par le parent, comme si la règle de l’enfant n’existait pas.

/* style.css du thème enfant */
.site-title {
    color: #1a1a2e;
}

Le code semble irréprochable. Aucune erreur dans la console, aucun message dans les journaux PHP. Pourtant, dans l’inspecteur du navigateur, la règle du thème enfant apparaît bien barrée, remplacée par celle du parent chargée après.

L'essentiel à retenir : Une règle CSS enfant peut être écrasée par le parent chargé après ; La dépendance déclarée dans wp_enqueue_style() règle l'ordre ; Vérifier l'ordre réel dans la source plutôt que de supposer

Diagnostic

La cause se trouve dans functions.php du thème enfant, à l’endroit où les feuilles de style sont enregistrées. Un enregistrement incomplet, sans déclaration de dépendance, ne garantit aucun ordre précis entre le style parent et le style enfant : WordPress charge chaque feuille dans l’ordre où les extensions et le thème les ont enregistrées, sans lien logique entre elles.

// Version incomplète, source du problème
function monthème_enfant_styles() {
    wp_enqueue_style( 'style-enfant', get_stylesheet_uri() );
}
add_action( 'wp_enqueue_scripts', 'monthème_enfant_styles' );

Ici, rien n’indique à WordPress que style-enfant doit se charger après le style du thème parent. Selon l’ordre d’exécution interne, ou selon qu’une extension enregistre elle-même une feuille de style du parent séparément, le style de l’enfant peut se retrouver chargé avant celui du parent, et donc être écrasé par lui dans la cascade CSS.

Correctif

La solution consiste à déclarer explicitement le style du parent comme dépendance du style de l’enfant, via le deuxième argument de wp_enqueue_style(), qui accepte un tableau de handles dont le chargement doit précéder celui du style en cours de déclaration.

function monthème_enfant_styles() {
    wp_enqueue_style( 'style-parent', get_template_directory_uri() . '/style.css' );
    wp_enqueue_style(
        'style-enfant',
        get_stylesheet_uri(),
        array( 'style-parent' ),
        wp_get_theme()->get( 'Version' )
    );
}
add_action( 'wp_enqueue_scripts', 'monthème_enfant_styles' );

Avec cette déclaration, WordPress garantit que style-parent est chargé avant style-enfant dans le document final, quel que soit l’ordre réel des appels à wp_enqueue_style() ailleurs dans le code. Le quatrième argument, la version, mérite aussi l’attention : utiliser wp_get_theme()->get('Version') évite de servir une version en cache du fichier après chaque mise à jour du thème enfant.

Prévention

Pour éviter de retomber dans ce piège sur un futur projet, quelques réflexes simples :

  • Toujours déclarer explicitement la dépendance entre le style enfant et le style parent, même si l’ordre semble correct au moment du test.
  • Vérifier l’ordre réel de chargement dans le code source de la page, pas seulement dans le résultat visuel qui peut masquer le problème selon le navigateur.
  • Éviter de recopier get_stylesheet_uri() pour le parent : cette fonction retourne toujours le style de l’enfant actif, il faut utiliser get_template_directory_uri() pour cibler le parent.

Un contrôle rapide qui évite bien des recherches inutiles : ouvrir l’onglet réseau du navigateur et vérifier, dans l’ordre d’apparition des requêtes CSS, lequel des deux styles arrive réellement en second.

En résumé

Une règle CSS qui semble ignorée dans un thème enfant n’est presque jamais un problème de spécificité mal calculée : c’est le plus souvent un ordre de chargement non maîtrisé. Déclarer la dépendance entre les deux feuilles de style avec wp_enqueue_style() règle ce genre de situation en quelques minutes, une fois le vrai diagnostic posé.

Laisser un commentaire

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

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi