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

Astuces

sanitize_hex_color : valider une couleur saisie dans un champ de réglage

Un champ de couleur libre laisse passer n'importe quelle chaîne. Sans validation, une valeur mal formée finit par casser un style généré dynamiquement.

Par WordPress Développement • 7 novembre 2022 • 3 min de lecture • Aucun commentaire
sanitize_hex_color : valider une couleur saisie dans un champ de réglage

Un champ de réglage personnalisé qui accepte une couleur au format texte libre, sans validation, finit tôt ou tard par recevoir une valeur inattendue : un nom de couleur CSS, une chaîne rgba, ou simplement une faute de frappe. Si cette valeur est ensuite injectée directement dans une feuille de style générée dynamiquement, le résultat peut aller d’un style silencieusement ignoré à une chaîne CSS mal formée qui casse l’affichage.

sanitize_hex_color() répond à ce besoin précis de validation, en acceptant uniquement une chaîne conforme au format hexadécimal court ou long, précédée d’un dièse.

Ce que la fonction accepte, et ce qu’elle rejette

sanitize_hex_color( '#ff6600' ); // '#ff6600'
sanitize_hex_color( '#f60' );    // '#f60'
sanitize_hex_color( 'ff6600' );  // null (dièse manquant)
sanitize_hex_color( 'orange' );  // null (pas un format hexadécimal)
sanitize_hex_color( '' );        // '' (chaîne vide autorisée telle quelle)

Une valeur vide est traitée à part : elle est retournée telle quelle, sans être considérée comme invalide, ce qui permet à un champ de réglage de rester facultatif sans déclencher de rejet sur une valeur simplement non renseignée.

Utilisation dans un callback de réglage

L'essentiel à retenir : Accepte uniquement un format hexadécimal valide à trois ou six caractères ; Retourne null pour toute valeur mal formée, jamais une chaîne tronquée ; Existe en variante avec valeur par défaut via sanitize_hex_color_no_hash
register_setting( 'mon_groupe_reglages', 'ma_couleur_accent', array(
    'type'              => 'string',
    'sanitize_callback' => 'sanitize_hex_color',
    'default'           => '#2271b1',
) );

En le déclarant directement comme sanitize_callback, chaque enregistrement du réglage passe automatiquement par cette validation, sans code supplémentaire à écrire dans le formulaire d’administration lui-même.

La variante sans dièse

Pour un champ où le dièse est ajouté séparément à l’affichage plutôt que saisi par l’utilisateur, sanitize_hex_color_no_hash() accepte le même format sans exiger le caractère # en préfixe, et retourne la valeur également sans dièse.

FonctionFormat attendu en entréeFormat en sortie
sanitize_hex_color()Avec dièseAvec dièse, ou null
sanitize_hex_color_no_hash()Sans dièseSans dièse, ou null

Ce que cette fonction ne couvre pas

  • Les formats rgb(), rgba() ou hsl() ne sont pas reconnus par cette fonction : elle est strictement dédiée au format hexadécimal.
  • Elle ne gère aucune conversion entre formats : une valeur rgba() valide sera simplement rejetée, jamais convertie automatiquement.
  • Pour les palettes de couleurs déclarées dans theme.json, la validation suit un mécanisme différent, propre au schéma de ce fichier, sans passer par cette fonction PHP.

Un repère pour toute page de réglages personnalisée qui propose un champ de couleur : dès que ce champ n’est pas un composant natif de sélection de couleur, une validation explicite via sanitize_hex_color() évite qu’une valeur mal formée ne remonte jusqu’à une feuille de style générée dynamiquement.

En résumé

Un champ de couleur en apparence anodin mérite la même rigueur de validation que n’importe quel autre champ de réglage. sanitize_hex_color() couvre le cas le plus courant — un format hexadécimal — avec un comportement prévisible : une valeur conforme passe, tout le reste devient null, sans jamais laisser passer une chaîne à moitié valide.

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