vendredi 25 septembre 2026

À propos

Contact

Blocs Gutenberg

registerFormatType : ajouter un format personnalisé à la barre RichText

Surlignage, abréviation, info-bulle : voici comment créer un format inline utilisable dans n'importe quel champ RichText, avec toggleFormat et RichTextToolbarButton.

Par Clément Hadrot • 3 août 2020 • 4 min de lecture • Aucun commentaire
registerFormatType : ajouter un format personnalisé à la barre RichText

« Pourquoi je ne peux pas juste surligner un mot dans mon paragraphe ? » — c’est la question qui revient le plus souvent de clients habitués à un traitement de texte classique. Gutenberg gère nativement le gras, l’italique et le lien, mais rien n’empêche d’ajouter d’autres formats inline : surlignage, abréviation avec info-bulle, texte barré avec une couleur spécifique. La fonction registerFormatType, du paquet @wordpress/rich-text, sert exactement à ça.

La différence entre un format et un bloc

Un format s’applique à une portion de texte sélectionnée à l’intérieur d’un champ RichText, pas au bloc dans son ensemble. Techniquement, il correspond à une balise HTML inline (ou à un attribut sur une balise existante) insérée autour de la sélection, un peu comme le fait <strong> pour le gras. Une fois enregistré, un format devient disponible dans tous les champs RichText du site, y compris ceux de blocs tiers, ce qui en fait un outil transversal plutôt qu’une fonctionnalité propre à un seul bloc.

Recette : un format de surlignage

import { registerFormatType, toggleFormat } from '@wordpress/rich-text';
import { RichTextToolbarButton } from '@wordpress/block-editor';

const name = 'mon-projet/surlignage';

registerFormatType( name, {
	title: 'Surlignage',
	tagName: 'mark',
	className: null,
	edit( { isActive, value, onChange } ) {
		return (
			<RichTextToolbarButton
				icon="admin-customizer"
				title="Surlignage"
				onClick={ () => {
					onChange( toggleFormat( value, { type: name } ) );
				} }
				isActive={ isActive }
			/>
		);
	},
} );

La balise <mark> est native en HTML5 pour le surlignage : pas besoin d’inventer une classe CSS pour ce cas précis. toggleFormat applique ou retire le format sur la sélection courante, en préservant la position du curseur — c’est ce comportement qui rend l’expérience naturelle pour l’utilisateur.

Variante : une abréviation avec info-bulle

L'essentiel à retenir : Un format inline s'applique à une sélection de texte, pas au bloc entier ; toggleFormat bascule le format sans casser la sélection ; Le format survit dans le HTML sauvegardé via une balise ou un attribut

Pour un format qui porte un attribut supplémentaire, comme un titre d’info-bulle sur une abréviation, la déclaration se complète d’un objet attributes :

registerFormatType( 'mon-projet/abreviation', {
	title: 'Abréviation',
	tagName: 'abbr',
	className: null,
	attributes: {
		title: 'title',
	},
	edit( { isActive, value, onChange } ) {
		return (
			<RichTextToolbarButton
				icon="editor-help"
				title="Abréviation"
				onClick={ () => {
					const titre = window.prompt( 'Signification :' );
					if ( ! titre ) return;
					onChange(
						toggleFormat( value, {
							type: 'mon-projet/abreviation',
							attributes: { title: titre },
						} )
					);
				} }
				isActive={ isActive }
			/>
		);
	},
} );

L’objet attributes mappe un nom d’attribut logique (title) vers l’attribut HTML réellement écrit sur la balise <abbr>. Un window.prompt reste rudimentaire pour la démonstration ; en production, une petite popover avec un champ texte offre une meilleure expérience.

Ce que ça ne couvre pas

Un format personnalisé reste limité à une portion de texte inline. Dès que le besoin dépasse ce cadre — insérer un élément avec sa propre structure, gérer plusieurs lignes, ou stocker une donnée complexe non réductible à un attribut de balise — c’est un bloc complet qu’il faut créer, pas un format supplémentaire.

  • Un format ne peut pas contenir d’autres blocs.
  • Il ne dispose pas de son propre panneau latéral d’inspecteur.
  • Il doit rester réversible : le retirer ne doit laisser aucune trace dans le contenu.

Retirer proprement un format en cours de projet

Si un format cesse d’être utile, unregisterFormatType( name ) le retire de la barre d’outils, mais le HTML déjà écrit dans les articles existants garde la balise correspondante. Il faut alors migrer le contenu existant, par exemple avec une recherche-remplacement ciblée, sous peine de laisser des balises orphelines dans les articles publiés.

Sur nos projets, un format qui n’a pas d’icône Dashicons adaptée mérite un SVG personnalisé plutôt qu’une icône approximative : l’utilisateur associe l’icône au résultat visuel, une icône mal choisie crée de la confusion durable.

En résumé

registerFormatType reste sous-utilisé alors qu’il répond précisément aux demandes de mise en forme fine que les blocs seuls ne couvrent pas. Une poignée de lignes de JavaScript suffit à doter tout le site d’un format cohérent, disponible partout où un champ RichText existe.

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