vendredi 25 septembre 2026

À propos

Contact

Blocs Gutenberg

Un format personnalisé de lien vers un glossaire interne

Un terme métier répété dans chaque article, une infobulle attendue au survol plutôt qu'un lien classique qui casse la lecture. Un format RichText sur mesure a réglé ça.

Par Clément Hadrot • 23 octobre 2023 • 4 min de lecture • Aucun commentaire
Un format personnalisé de lien vers un glossaire interne

Un cabinet de conseil en cybersécurité publiait des articles techniques truffés de termes spécialisés (« phishing », « zero day », « surface d’attaque ») que ses lecteurs non experts ne maîtrisaient pas tous. La première solution envisagée par le rédacteur consistait à créer un lien hypertexte classique vers une page de glossaire à chaque occurrence, mais ce choix multipliait les liens sortants du flux de lecture principal et obligeait le lecteur à quitter l’article pour comprendre un simple mot, une expérience jugée trop lourde pour un besoin somme toute ponctuel.

Le besoin réel n’était pas un lien de navigation, mais une infobulle contextuelle affichée au survol, sans quitter la page. C’est exactement ce que permet un format personnalisé de texte enrichi enregistré via registerFormatType, appliqué à une sélection de texte à l’intérieur d’un bloc, au même titre que le gras ou l’italique natifs de l’éditeur.

Le choix de la balise porteuse

Plutôt qu’un <a href> qui suggère implicitement une navigation, la balise HTML <abbr>, conçue précisément pour porter une explication contextuelle via son attribut title, correspond bien mieux à l’intention réelle : afficher un survol explicatif natif du navigateur, sans dépendance JavaScript supplémentaire côté front, tout en restant sémantiquement correcte pour les lecteurs d’écran.

Enregistrer le format

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

registerFormatType( 'cabinet/glossaire', {
    title: __( 'Terme de glossaire', 'cabinet' ),
    tagName: 'abbr',
    className: 'terme-glossaire',
    attributes: {
        title: 'title',
    },
    edit( { value, onChange, isActive } ) {
        return (
            <RichTextToolbarButton
                icon="editor-help"
                title={ __( 'Terme de glossaire', 'cabinet' ) }
                isActive={ isActive }
                onClick={ () => {
                    const definition = window.prompt(
                        __( 'Définition à afficher au survol', 'cabinet' )
                    );
                    if ( ! definition ) return;
                    onChange(
                        toggleFormat( value, {
                            type: 'cabinet/glossaire',
                            attributes: { title: definition },
                        } )
                    );
                } }
            />
        );
    },
} );
L'essentiel à retenir : registerFormatType associe un format à une balise HTML propre ; L'infobulle se construit avec un simple attribut title sur la balise ; Le format reste sélectionnable via la barre d'outils de texte enrichi

Ce que produit le format sur le contenu final

Une fois appliqué sur le mot « phishing » avec une définition saisie, le format produit le balisage suivant, entièrement sérialisé au sein de l’attribut content du bloc de paragraphe englobant :

<p>Une attaque de <abbr class="terme-glossaire" title="Tentative d'obtenir des informations confidentielles en usurpant une identité de confiance">phishing</abbr> cible généralement...</p>

Un choix d’ergonomie discutable à surveiller

La saisie de la définition via window.prompt() reste une solution rapide à mettre en œuvre, mais peu satisfaisante en matière d’expérience d’édition, en particulier pour des définitions longues ou nécessitant une mise en forme. Une évolution plus aboutie remplacerait ce prompt par un composant Popover du package @wordpress/components, avec un champ de texte multi-lignes plutôt qu’une simple boîte de dialogue native du navigateur.

  • Un prompt natif convient pour un prototype rapide, jamais pour une mise en production à grande échelle.
  • Un Popover avec TextareaControl offre une bien meilleure expérience pour des définitions de plusieurs phrases.
  • Prévoir une valeur par défaut cohérente si le rédacteur annule la saisie sans renseigner de définition.

Centraliser les définitions plutôt que les ressaisir

Sur le projet du cabinet de conseil, ressaisir manuellement la même définition à chaque occurrence du terme dans des dizaines d’articles s’est vite révélé source d’incohérences. Une évolution ultérieure a remplacé la saisie libre par une liste déroulante alimentée par une requête à l’API REST vers un type de contenu personnalisé « Termes de glossaire », garantissant une définition unique et centralisée pour chaque terme, quel que soit l’article dans lequel il apparaît.

Un format de texte enrichi personnalisé gagne toujours à être pensé comme une brique réutilisable dans plusieurs articles, pas comme une simple mise en forme locale à un seul contenu : la centralisation de la donnée sous-jacente évite les divergences silencieuses au fil du temps.

Pour aller plus loin

Ce format personnalisé montre qu’un besoin en apparence anodin, une simple infobulle, gagne à être traité avec le même sérieux qu’un bloc complet : choix de la balise sémantique appropriée, expérience d’édition soignée, et réflexion sur la source de vérité de la donnée affichée. Le résultat, une fois généralisé à l’ensemble des articles du cabinet, a nettement réduit le nombre de questions envoyées au support concernant des termes techniques mal compris.

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