Gutenberg (l’éditeur de blocs de WordPress) a été conçu autour de blocs rendus en JavaScript. Vous écrivez une fonction save() en JS qui retourne le HTML du bloc, et WordPress enregistre ce HTML dans le contenu de l’article. Pour des blocs visuels simples, cela fonctionne très bien.
Mais pour des blocs dynamiques — “Afficher les 3 derniers articles de blog avec un style personnalisé,” “Afficher un membre de l’équipe avec des données du profil de l’utilisateur actuel,” “Rendre une grille de produits à partir d’une requête WooCommerce” — les blocs JavaScript sont pénibles. Vous finissez par écrire des appels à l’API REST, gérer les états de chargement, et reconstruire la logique de récupération de données que WordPress sait déjà faire en PHP.
Les blocs rendus en PHP vous permettent d’écrire un rappel PHP qui s’exécute au moment du rendu de la page, a un accès complet aux API de données de WordPress (WP_Query, get_field(), get_post_meta(), etc.), et retourne le HTML directement. Plus simple, plus rapide, et plus conforme à l’idiome WordPress.
ACF a introduit acf_register_block_type() il y a des années et cela est devenu la norme de facto pour les développeurs d’agences construisant des blocs Gutenberg personnalisés. Field Forge prend en charge la même signature de fonction, donc la migration est triviale.
“`php // functions.php ou un plugin personnalisé
add_action(‘acf/init’, ‘register_my_blocks’);
function register_my_blocks() { if (function_exists(‘acf_register_block_type’)) { acf_register_block_type([ ‘name’ => ‘feature-card’, ‘title’ => __(‘Carte de Fonctionnalité’), ‘description’ => __(‘Une carte de fonctionnalité avec icône, titre et description.’), ‘render_callback’ => ‘render_feature_card_block’, ‘category’ => ‘theme’, ‘icon’ => ‘star-filled’, ‘keywords’ => [‘feature’, ‘card’], ‘supports’ => [ ‘align’ => [‘wide’, ‘full’], ‘anchor’ => true, ‘color’ => true, ], ]); } }
function render_feature_card_block($block) { $icon = get_field(‘icon’); $title = get_field(‘title’); $description = get_field(‘description’); ?>
<?php } ```
Ce code est identique au code d’enregistrement d’ACF. Fonctionne sans changement après la migration.
Si vous préférez l’API native de Field Forge (pour la propreté du code ou pour éviter d’impliquer qu’ACF est toujours nécessaire), utilisez fieldforge_register_block_type() :
“php add_action('init', function() { fieldforge_register_block_type([ 'name' => 'feature-card', 'title' => __('Carte de Fonctionnalité'), 'render_callback' => 'render_feature_card_block', 'category' => 'theme', ]); }); “
Les deux fonctions font la même chose. Utilisez celle qui correspond aux conventions de votre équipe.
Chaque bloc PHP peut avoir son propre groupe de champs assigné via des règles de localisation :
“ Règles de localisation : Le bloc est égal à "acf/feature-card" “
Lorsque un éditeur ajoute le bloc à un article, Field Forge rend le groupe de champs dans la barre latérale du bloc (ou en ligne, selon les paramètres du bloc). L’éditeur remplit les champs, le bloc se met à jour automatiquement avec un aperçu en direct.
Au moment du rendu, la fonction render_callback utilise get_field() pour accéder aux valeurs des champs :
“`php function render_feature_card_block($block) { // get_field() fonctionne à l’intérieur des rappels de bloc $icon = get_field(‘icon’); $title = get_field(‘title’);
// Le tableau $block contient tout sur cette instance spécifique du bloc $block_id = $block[‘id’]; $is_preview = !empty($block[‘is_preview’]); $block_data = $block[‘data’]; $className = !empty($block[‘className’]) ? $block[‘className’] : ”;
// Rendre le HTML ?>
<div class="feature-card “><?php } ```
Les blocs PHP prennent en charge toutes les fonctionnalités standard des blocs Gutenberg :
'align' => ['wide', 'full']'anchor' => true pour les liens d’ancrage HTML'color' => ['text' => true, 'background' => true]Tout configuré via l’API de support de blocs standard de WordPress.
Lorsque un éditeur visualise le bloc dans l’éditeur (pas sur le frontend), le rappel s’exécute en “mode aperçu” :
“php function render_my_block($block) { if ($block['is_preview']) { // Rendu dans l'éditeur echo '
'; } else { render_actual_block($block); } } “
Utilisez ceci pour ajouter des wrappers réservés à l’éditeur, du contenu de remplacement lorsque les champs sont vides, ou un style d’aperçu spécial.
Les blocs PHP peuvent contenir d’autres blocs Gutenberg via InnerBlocks :
“`php acf_register_block_type([ ‘name’ => ‘two-column’, ‘render_callback’ => ‘render_two_column_block’, ‘supports’ => [ ‘inner_blocks’ => true, ], ]);
function render_two_column_block($block) { ?>
<?php } ```
Cela vous permet de construire des blocs de mise en page réutilisables que les utilisateurs peuvent remplir avec n’importe quel bloc Gutenberg de base (paragraphe, titre, image, etc.).
Pré-remplir les blocs avec un contenu interne par défaut :
“php acf_register_block_type([ 'name' => 'three-column', 'render_callback' => 'render_three_column_block', 'template' => [ ['core/columns', [], [ ['core/column', [], [['core/heading', ['content' => 'Colonne 1']]]], ['core/column', [], [['core/heading', ['content' => 'Colonne 2']]]], ['core/column', [], [['core/heading', ['content' => 'Colonne 3']]]], ]], ], ]); “
Chaque appel à acf_register_block_type() dans votre thème existant fonctionne sans changement lorsque Field Forge est actif (via la couche de compatibilité). Aucun changement de code nécessaire.
Le processus de migration :
acf_register_block_type() continuent de fonctionnerLa plupart des sites avec des blocs PHP personnalisés terminent la migration sans toucher au code d’enregistrement des blocs.
Les blocs PHP se rendent sur le serveur, donc ils n’ajoutent pas de poids de bundle JavaScript. Combiné avec le stockage de table personnalisé de Field Forge, les recherches de valeurs de champs à l’intérieur des rappels de rendu sont rapides. Une page avec 20 blocs personnalisés fonctionne avec une fraction du nombre de requêtes qu’un ensemble similaire rendu en JavaScript nécessiterait.
| Blocs rendus en PHP | Blocs Gutenberg en JavaScript | |
|---|---|---|
| Langue | PHP | JavaScript (React / JSX) |
| Outils de construction | Aucun | Webpack / Vite / wp-scripts |
| Accès aux données dynamiques | Facile (get_field(), WP_Query) |
Nécessite des appels à l’API REST |
| Expérience développeur | Familier pour les développeurs PHP | Nécessite des compétences en JavaScript |
| Interactivité côté client | Pas possible | Cycle de vie complet des composants React |
| Rendu côté serveur | Oui (par défaut) | Blocs dynamiques uniquement |
| Meilleur pour | Blocs de contenu, requêtes dynamiques, champs personnalisés | Widgets interactifs, édition en direct |
Les blocs PHP et les blocs JavaScript ne sont pas mutuellement exclusifs — utilisez les deux sur le même site pour des objectifs différents.
Obtenez Field Forge — à partir de 35 $/an →
Le support des blocs PHP est inclus dans chaque plan payant.