Un bloc qui affiche les trois derniers articles ou une météo en temps réel ne peut pas se contenter de sauvegarder du HTML figé : son contenu doit être recalculé à chaque visite. C’est cette contrepartie côté serveur de l’enregistrement JavaScript qui rend cela possible.
Comment ça fonctionne
Depuis WordPress 5.8, la fonction register_block_type() peut lire directement un fichier block.json et y associer une fonction render_callback pour la partie dynamique :
register_block_type( __DIR__ . '/build', array(
'render_callback' => 'afficher_bloc_meteo',
) );
function afficher_bloc_meteo( $attributs, $contenu ) {
return '<p>Température actuelle : ' . esc_html( recuperer_temperature() ) . '</p>';
}
Quand un render_callback est fourni, WordPress ignore le contenu statique sauvegardé en base par l’éditeur et affiche systématiquement le résultat de cette fonction PHP à la place.
À ne pas confondre
- Un bloc entièrement statique (comme un simple paragraphe) n’a besoin d’aucun enregistrement côté serveur : seul le fichier
block.jsonet le code JavaScript suffisent. - Le fichier
block.jsondoit rester la source de vérité des métadonnées (nom, catégorie, attributs) partagée entre PHP et JavaScript, plutôt que de dupliquer ces informations à deux endroits. - Le troisième argument reçu par la fonction de rendu est l’instance
WP_Block, qui donne accès au contexte du bloc parent, utile par exemple dans une boucle de requête imbriquée. - Un bloc dynamique n’a généralement pas besoin de fonction
save()côté JavaScript, ou alors une fonction qui retourne simplementnull, puisque le contenu final vient toujours du PHP.