Blog
Au-delà des blocs de base : Créer des blocs Gutenberg personnalisés pour améliorer les fonctionnalités de WordPress
Libérez tout le potentiel de l'éditeur de blocs WordPress en apprenant à créer vos propres blocs Gutenberg personnalisés. Ce guide fournit des étapes pratiques, des exemples de code et les meilleures pratiques pour étendre les fonctionnalités et le design de votre site.

Résumé
L'éditeur de blocs WordPress, Gutenberg, a révolutionné la création de contenu avec son système de blocs modulaires. Bien que les blocs principaux offrent une polyvalence, les blocs personnalisés sont essentiels pour des fonctionnalités et une image de marque uniques. Cet article vous guide tout au long du processus de développement de vos propres blocs Gutenberg, couvrant les concepts essentiels tels que l'enregistrement des blocs, les attributs et le rendu. Nous explorerons des exemples pratiques, discuterons des meilleures pratiques pour l'organisation du code et la sécurité, et soulignerons comment les blocs personnalisés s'intègrent à l'architecture et aux hooks de WordPress. En maîtrisant le développement de blocs personnalisés, vous pouvez améliorer considérablement les capacités et l'expérience utilisateur de votre site WordPress.
Au-delà des blocs de base : Créer des blocs Gutenberg personnalisés pour améliorer les fonctionnalités de WordPress
L'avènement de l'éditeur de blocs Gutenberg dans WordPress 5.0 a marqué un changement significatif dans la manière dont le contenu est créé et géré. S'éloignant de l'approche linéaire de l'éditeur classique, Gutenberg a introduit un système modulaire où le contenu est construit à l'aide de "blocs" discrets. Bien que l'ensemble par défaut de blocs couvre un large éventail de besoins courants, de nombreux sites Web nécessitent des fonctionnalités uniques, des éléments de conception spécifiques ou des intégrations qui vont au-delà de ce qui est facilement disponible. C'est là qu'intervient le développement de blocs Gutenberg personnalisés, offrant un moyen puissant d'étendre les capacités de WordPress et de l'adapter précisément aux exigences de votre projet.
Le développement de blocs personnalisés vous permet de créer des composants réutilisables qui rationalisent la création de contenu pour les éditeurs, garantissent la cohérence de la marque et implémentent des fonctionnalités complexes directement dans l'interface de l'éditeur. Ce guide vous accompagnera tout au long du processus, de la compréhension des principes fondamentaux à la mise en œuvre des meilleures pratiques pour des blocs personnalisés robustes et maintenables.
Comprendre l'architecture de l'éditeur de blocs
Avant de plonger dans le développement, il est crucial de comprendre comment Gutenberg et ses blocs fonctionnent au sein de l'écosystème WordPress. WordPress lui-même est construit sur une architecture modulaire PHP et MySQL. Les thèmes contrôlent la présentation et les plugins ajoutent des fonctionnalités. Gutenberg, en tant que fonctionnalité principale de WordPress, s'intègre de manière transparente dans cette structure. Il utilise JavaScript (principalement React) pour son expérience d'édition dynamique dans le navigateur, tandis que PHP gère l'enregistrement et le rendu côté serveur.
Les blocs personnalisés sont essentiellement des composants JavaScript qui sont enregistrés auprès de WordPress. Lorsqu'un utilisateur ajoute un bloc personnalisé à un article ou à une page, Gutenberg stocke sa configuration (attributs) dans la base de données. Lors du rendu de l'article sur le front-end, WordPress utilise PHP pour interpréter cette configuration et générer le HTML approprié, en utilisant souvent le même composant JavaScript ou un modèle PHP distinct.
Les composants de base d'un bloc personnalisé
Chaque bloc Gutenberg personnalisé, à la base, se compose de plusieurs parties clés :
- Enregistrement : C'est le processus qui consiste à informer WordPress de votre nouveau bloc. Il implique la définition de son nom, de son titre, de son icône et d'autres métadonnées. Ceci est principalement fait en utilisant la fonction JavaScript
registerBlockType. - Attributs : Ce sont les champs de données associés à votre bloc. Considérez-les comme les paramètres ou les propriétés que l'utilisateur peut modifier pour une instance spécifique du bloc (par exemple, le contenu textuel, l'URL de l'image, le choix de la couleur). Les attributs sont définis dans l'enregistrement JavaScript du bloc.
- Fonction d'édition (
edit) : Cette fonction JavaScript définit l'apparence et le comportement du bloc dans l'éditeur Gutenberg. C'est là que vous construisez l'interface utilisateur interactive que les créateurs de contenu utiliseront pour configurer le bloc. - Fonction de sauvegarde (
save) : Cette fonction JavaScript définit le balisage HTML statique qui sera enregistré dans la base de données et rendu sur le front-end de votre site Web. Elle doit refléter l'état actuel des attributs du bloc.
Pas à pas : Créer votre premier bloc personnalisé
Créons un bloc personnalisé simple qui affiche un "Appel à l'action" (CTA) avec un titre et un bouton. Cet exemple se concentrera sur les aspects JavaScript essentiels pour l'enregistrement et l'édition des blocs, en supposant qu'un environnement de développement WordPress de base est configuré.
Prérequis :
- Un environnement de développement WordPress local.
- Compréhension de base de JavaScript, React et PHP.
- Node.js et npm (ou yarn) installés pour la compilation des actifs.
1. Configuration du projet :
Les blocs personnalisés sont généralement développés dans le cadre d'un plugin. Créez un nouveau fichier de plugin (par exemple, mon-blocs-personnalises/mon-blocs-personnalises.php) et un fichier JavaScript pour votre bloc (par exemple, src/index.js). Vous aurez également besoin d'un processus de construction pour compiler votre JavaScript. Une approche courante consiste à utiliser @wordpress/scripts, qui fournit un moyen pratique de gérer la compilation.
Dans le répertoire racine de votre plugin, créez un fichier package.json :
{
"name": "mon-blocs-personnalises",
"version": "1.0.0",
"description": "Un plugin pour les blocs Gutenberg personnalisés.",
"main": "index.js",
"scripts": {
"build": "wp-scripts build",
"start": "wp-scripts start"
},
"keywords": ["wordpress", "gutenberg", "bloc"],
"author": "Votre Nom",
"license": "GPL-2.0-or-later",
"devDependencies": {
"@wordpress/scripts": "^26.0.0"
}
}
Installez les dépendances : npm install.
2. Enregistrement du bloc (JavaScript) :
Dans votre fichier src/index.js, vous utiliserez registerBlockType du package @wordpress/blocks.
import { registerBlockType } from '@wordpress/blocks';
import { __ } from '@wordpress/i18n';
// Importer les composants pour l'éditeur
import { Edit } from './edit';
import { Save } from './save';
registerBlockType( 'mon-blocs-personnalises/cta', {\n title: __( 'Appel à l\'action', 'mon-blocs-personnalises' ),\n icon: 'megaphone',\n category: 'widgets',\n attributes: {\n headline: {\n type: 'string',\n default: '',\n },
buttonText: {
type: 'string',
default: 'En savoir plus',
},
buttonUrl: {
type: 'string',
default: '#',
},
},
edit: Edit,
save: Save,
} );
3. Définition de l'interface de l'éditeur (src/edit.js) :
Ce composant gère l'apparence et le fonctionnement du bloc dans l'éditeur.
import { __ } from '@wordpress/i18n';
import { useBlockProps, RichText, InspectorControls } from '@wordpress/block-editor';
import { PanelBody, TextControl } from '@wordpress/components';
export const Edit = ( { attributes, setAttributes } ) => {
const blockProps = useBlockProps();
const onChangeHeadline = ( newHeadline ) => {
setAttributes( { headline: newHeadline } );
};
const onChangeButtonText = ( newButtonText ) => {
setAttributes( { buttonText: newButtonText } );
};
const onChangeButtonUrl = ( newButtonUrl ) => {
setAttributes( { buttonUrl: newButtonUrl } );
};
return (
<>
<InspectorControls>
<PanelBody title={ __( 'Paramètres du bouton', 'mon-blocs-personnalises' ) }>
<TextControl
label={ __( 'Texte du bouton', 'mon-blocs-personnalises' ) }
value={ attributes.buttonText }
onChange={ onChangeButtonText }
/>
<TextControl
label={ __( 'URL du bouton', 'mon-blocs-personnalises' ) }
value={ attributes.buttonUrl }
onChange={ onChangeButtonUrl }
/>
</PanelBody>
</InspectorControls>
<div { ...blockProps }>
<RichText
tagName="h3"
placeholder={ __( 'Entrez votre titre ici...', 'mon-blocs-personnalises' ) }
value={ attributes.headline }
onChange={ onChangeHeadline }
allowedFormats={ [ 'core/bold', 'core/italic' ] }
/>
<a href={ attributes.buttonUrl } className="wp-element-button">
{ attributes.buttonText }
</a>
</div>
</>
);
};
4. Définition de la fonction de sauvegarde (src/save.js) :
Cette fonction détermine la sortie HTML pour le front-end.
import { useBlockProps, RichText } from '@wordpress/block-editor';
export const Save = ( { attributes } ) => {
const blockProps = useBlockProps.save();
return (
<div { ...blockProps }>
<RichText.Content
tagName="h3"
value={ attributes.headline }
/>
<a href={ attributes.buttonUrl } className="wp-element-button">
{ attributes.buttonText }
</a>
</div>
);
};
5. Mise en file d'attente du script de bloc (PHP) :
Dans votre fichier de plugin principal (mon-blocs-personnalises.php), vous devez enregistrer et mettre en file d'attente votre fichier JavaScript compilé.
<?php
/**
* Nom du plugin : Mes Blocs Personnalisés
* Description : Ajoute des blocs Gutenberg personnalisés.
* Version : 1.0
* Auteur : Votre Nom
*/
function mes_blocs_personnalises_register_block() {
// Charge automatiquement le fichier block.json et met en file d'attente le script.
register_block_type( __DIR__ . '/build' );
}
add_action( 'init', 'mes_blocs_personnalises_register_block' );
?>
6. Compilation des actifs :
Exécutez npm run build dans le répertoire de votre plugin. Cela compilera votre JavaScript dans le dossier build.
Maintenant, activez le plugin dans WordPress. Vous devriez voir votre bloc "Appel à l'action" disponible dans l'éditeur !
Meilleures pratiques pour le développement de blocs personnalisés
Le développement de blocs personnalisés va au-delà de leur simple fonctionnalité. Le respect des meilleures pratiques garantit que vos blocs sont sécurisés, performants, accessibles et maintenables.
- Espace de noms : Utilisez toujours un espace de noms unique pour votre bloc (par exemple,
mon-blocs-personnalises/cta). Cela évite les conflits avec d'autres blocs. La fonctionregisterBlockTypegère cela. - Organisation du code : Gardez votre code JavaScript et PHP propre et bien organisé. Pour les blocs complexes, envisagez de diviser votre JavaScript en composants plus petits et réutilisables.
- Sécurité :
- Assainissement : Lors de l'enregistrement de données dans la base de données (en particulier le contenu généré par l'utilisateur), assainissez-les toujours. WordPress fournit des fonctions telles que
sanitize_text_field,esc_url, etc. - Échappement : Lors de la sortie de données vers le navigateur, échappez-les toujours pour éviter les attaques par injection de script inter-sites (XSS). Utilisez des fonctions telles que
esc_html,esc_attr,esc_url. - Nonces : Pour toute requête AJAX ou soumission de formulaire liée à votre bloc, utilisez des nonces pour vérifier que la requête provient d'une source WordPress légitime.
- Assainissement : Lors de l'enregistrement de données dans la base de données (en particulier le contenu généré par l'utilisateur), assainissez-les toujours. WordPress fournit des fonctions telles que
- Internationalisation (i18n) : Utilisez les fonctions
__()et_x()(de@wordpress/i18n) pour toutes les chaînes de caractères destinées à l'utilisateur dans votre JavaScript. Cela rend votre bloc traduisible. - Accessibilité : Assurez-vous que votre bloc est utilisable par tous. Utilisez du HTML sémantique, fournissez des attributs ARIA si nécessaire et testez avec des lecteurs d'écran.
- Performance :
- Chargement différé : Pour les blocs qui chargent des actifs lourds ou des données complexes, envisagez de mettre en œuvre des techniques de chargement différé.
- Rendu efficace : Optimisez votre fonction
saveet tout rendu côté serveur pour qu'il soit aussi efficace que possible. - Mise en file d'attente des actifs : Ne mettez en file d'attente que les scripts et styles nécessaires à votre bloc. Utilisez
enqueue_block_styleetenqueue_block_script_handlepour les actifs spécifiques au bloc.
- Modularité et extensibilité : Tirez parti des hooks (actions et filtres) de WordPress dans votre PHP pour permettre à d'autres plugins ou thèmes de modifier le comportement ou la sortie de votre bloc.
block.json: Pour les blocs plus complexes, utilisez un fichierblock.jsonpour déclarer les métadonnées du bloc, les dépendances, les styles et les identifiants de script. C'est la norme moderne pour le développement de blocs et simplifie la gestion des actifs.
Intégration avec l'architecture WordPress
Les blocs personnalisés ne sont pas des entités isolées. Ils s'intègrent profondément à l'architecture principale de WordPress :
- Hooks : Vous pouvez utiliser les actions et filtres PHP dans votre plugin pour modifier l'enregistrement des blocs, ajouter des styles ou des scripts personnalisés conditionnellement, ou même modifier la sortie rendue des blocs principaux. Par exemple, vous pourriez utiliser le filtre
block_type_metadata_settingspour modifier les paramètres d'un bloc enregistré. - Intégration thématique : Les thèmes basés sur des blocs et l'édition complète du site (FSE) s'appuient fortement sur les blocs. Les blocs personnalisés peuvent être conçus pour s'intégrer parfaitement dans les modèles FSE, permettant aux utilisateurs de construire des sites entiers en utilisant un flux de travail cohérent basé sur des blocs.
- Interopérabilité des plugins : Vos blocs personnalisés peuvent interagir avec d'autres plugins. Par exemple, un bloc de produit personnalisé pourrait extraire des données d'un plugin de commerce électronique, ou un bloc de galerie personnalisé pourrait s'intégrer à un plugin de bibliothèque multimédia spécifique.
Concepts avancés et considérations
- Rendu côté serveur (SSR) : Pour les blocs qui nécessitent des données dynamiques ou une logique complexe qui est mieux gérée côté serveur, vous pouvez implémenter le rendu côté serveur. Cela implique de définir une fonction
render_callbacken PHP lors de l'enregistrement du bloc. - Blocs dynamiques : Les blocs qui utilisent le SSR sont souvent appelés blocs dynamiques. Ils n'enregistrent pas de HTML statique dans la base de données ; au lieu de cela, ils n'enregistrent que leurs attributs, et le
render_callbackgénère le HTML à chaque chargement de page. - Styles de bloc : Vous pouvez définir des styles personnalisés pour vos blocs que les utilisateurs peuvent sélectionner dans l'éditeur.
- Variations de bloc : Créez des variations d'un bloc de base pour offrir des versions préconfigurées avec différents paramètres par défaut ou apparences.
- Différences entre l'éditeur et le front-end : Gardez à l'esprit que les fonctions
editetsavepourraient devoir gérer différents scénarios. La fonctioneditest destinée à l'expérience d'édition interactive, tandis que la fonctionsaveest destinée à la sortie HTML statique. Parfois, vous pourriez avoir besoin d'unrender_callbackséparé pour le rendu dynamique du front-end.
Conclusion
Le développement de blocs Gutenberg personnalisés est une compétence puissante qui débloque un nouveau niveau de personnalisation et de fonctionnalité pour les sites Web WordPress. En comprenant les composants de base — fonctions d'enregistrement, d'attributs, d'édition et de sauvegarde — et en respectant les meilleures pratiques en matière de sécurité, de performance et d'accessibilité, vous pouvez créer des blocs robustes, réutilisables et conviviaux. Que vous développiez un plugin personnalisé pour un client ou que vous amélioriez votre propre site, la maîtrise des blocs personnalisés élèvera considérablement vos capacités de développement WordPress, vous permettant d'aller au-delà des offres standard et de créer des expériences numériques véritablement uniques.