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

Thèmes

Antipatterns : un Customizer redéclaré alors que theme.json suffirait

Certains thèmes hybrides maintiennent un Customizer parallèle par habitude, alors que theme.json couvrirait les mêmes réglages plus simplement. Comment repérer et corriger ce doublon.

Par Clément Hadrot • 10 mars 2025 • 4 min de lecture • Aucun commentaire
Antipatterns : un Customizer redéclaré alors que theme.json suffirait

Comparé côte à côte, le panneau Customizer d’un thème hybride et son fichier theme.json déclaraient parfois exactement le même réglage sous deux formes différentes : une largeur de contenu définie à la fois via customize_register et via la clé settings.layout.contentSize de theme.json, chacune écrasant potentiellement l’autre selon l’ordre de chargement.

Ce qu’on observe dans ce genre de thème

Un thème hybride, construit à l’origine comme thème classique puis progressivement doté d’un fichier theme.json pour profiter des blocs, garde souvent son ancien panneau Customizer intact par habitude, sans jamais vérifier si les réglages qu’il propose font désormais doublon avec ceux que theme.json couvre nativement depuis la version 5.8 de WordPress, puis de façon stabilisée à partir de la 5.9.

Sur ce projet, neuf réglages du Customizer reproduisaient des fonctionnalités déjà disponibles dans theme.json : largeur de contenu, largeur large, espacement entre blocs, palette de couleurs, tailles de police. Chacun de ces réglages Customizer modifiait des variables CSS personnalisées via wp_add_inline_style, en parallèle des styles déjà générés automatiquement par WordPress à partir de theme.json.

Pourquoi c’est un problème

L'essentiel à retenir : Un thème hybride garde parfois deux systèmes de réglages qui se chevauchent ; theme.json couvre déjà la plupart des réglages de mise en page courants ; La migration se fait réglage par réglage, jamais en bloc

Deux sources de vérité pour un même réglage créent une ambiguïté difficile à déboguer : un contributeur qui modifie theme.json pour ajuster la largeur de contenu peut voir son changement silencieusement écrasé par la valeur retournée par le Customizer, sans message d’erreur, simplement parce que le CSS généré par le Customizer se charge après celui de theme.json dans l’ordre des feuilles de style.

Ce doublon complique aussi l’expérience de l’éditeur de blocs : les contrôles natifs de l’éditeur, alimentés par theme.json, proposent une valeur qui ne correspond pas toujours à ce qu’affiche réellement la page, faussée par le réglage Customizer parallèle. L’utilisateur qui personnalise une page dans l’éditeur ne comprend plus pourquoi son réglage n’a pas d’effet visible.

Quoi faire : migrer réglage par réglage

  1. Lister chaque réglage Customizer déclaré via customize_register dans le thème
  2. Vérifier, pour chacun, s’il existe une clé équivalente dans le schéma de theme.json (settings.layout, settings.color.palette, settings.typography.fontSizes)
  3. Reporter la valeur actuellement choisie par les utilisateurs vers theme.json, avant de retirer le contrôle Customizer correspondant
  4. Ne retirer un contrôle Customizer qu’après avoir confirmé, sur un environnement de test, que le rendu reste identique

Cette migration se fait un réglage à la fois, jamais en bloc, car certains réglages Customizer n’ont effectivement aucun équivalent dans theme.json — les réglages liés au logo ou aux menus de navigation classiques, par exemple, restent légitimement dans le Customizer via add_theme_support( 'custom-logo' ).

Ce qui reste légitimement au Customizer

  • Le logo personnalisé et les réglages associés
  • Les couleurs propres à des widgets classiques encore utilisés sur certaines zones du site
  • Les options qui ne concernent pas la mise en page ou les styles de blocs

Un signal qui aide à repérer ce doublon rapidement

Un indice fiable pour détecter ce genre de redondance sans avoir à comparer manuellement chaque réglage : ouvrir la console du navigateur sur le site en question et observer les variables CSS personnalisées déclarées deux fois dans des règles distinctes, l’une générée par le style engine à partir de theme.json, l’autre injectée par wp_add_inline_style depuis le Customizer. Deux définitions de la même variable, dans deux blocs <style> séparés, trahissent presque toujours ce type de doublon.

Ce signal se repère aussi plus simplement dans le code source du thème : une recherche de customize_register croisée avec le contenu de theme.json suffit, sans avoir besoin d’ouvrir le site en production, à condition de connaître la liste des clés que theme.json couvre nativement pour la mise en page et la typographie.

Un doublon de réglages ne se voit pas tant que personne ne modifie l’un des deux ; le jour où quelqu’un le fait, le diagnostic prend plus de temps que la migration elle-même.

En résumé

Un Customizer parallèle à theme.json part souvent d’une bonne intention : ne pas casser ce qui fonctionnait avant l’arrivée des blocs. Mais laisser cohabiter deux systèmes qui gèrent les mêmes réglages finit par produire des incohérences difficiles à tracer. La migration progressive, réglage par réglage, permet de simplifier le thème sans jamais retirer une fonctionnalité que les utilisateurs utilisaient réellement.

Partager :

À propos de l'auteur

Clément Hadrot

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

Voir tous ses articles

Dans la même veine

À lire aussi