Aller au contenu

Blocs réutilisables ou compositions synchronisées

Les blocs réutilisables et les compositions synchronisées sont la même fonction de WordPress sous deux noms, et le vrai choix se fait entre une composition synchronisée et une composition non synchronisée. Comparez les deux, vérifiez avec WP-CLI ce que votre site contient déjà et faites passer une composition d'un type à l'autre sans risque.

Les blocs réutilisables et les compositions synchronisées (synced patterns) sont une seule et même fonction, renommée par WordPress 6.3, qui a aussi ajouté un second type : la composition non synchronisée. Le vrai choix est donc entre synchronisée et non synchronisée. Prenez une composition synchronisée pour un contenu qui doit être identique partout et changer partout à la fois, comme un avis juridique, un formulaire d’abonnement à l’infolettre ou un encadré d’heures d’ouverture. Prenez une composition non synchronisée pour une mise en page de départ que chaque page adapte ensuite, comme une annonce d’événement ou une rangée de caractéristiques de produit. Un mauvais choix se reconnaît vite : une modification qui a changé cinquante pages quand vous en visiez une seule, ou une correction à refaire à la main sur chaque page.

Ce que vous allez accomplir

  • Comprendre où chaque type de composition est stocké et ce qu’une modification change réellement.
  • Comparer compositions synchronisées, non synchronisées et compositions de thème selon les critères qui comptent au quotidien.
  • Lister toutes les compositions d’un site avec leur état de synchronisation, et trouver toutes les pages qui utilisent une composition synchronisée donnée.
  • Choisir le bon type pour un nouveau contenu partagé.
  • Faire passer un contenu d’un type à l’autre sans perdre de pages.

Prérequis

  • WordPress 6.3 ou plus récent. Sur 6.2 et les versions antérieures, vous n’avez que les blocs réutilisables, qui se comportent comme les compositions synchronisées décrites ici.
  • Un compte qui peut modifier les articles. L’écran des compositions sous Apparence exige le rôle Administrateur ; les éditeurs gèrent les compositions à l’adresse /wp-admin/edit.php?post_type=wp_block.
  • WP-CLI sur le serveur pour les commandes d’inventaire. Chaque vérification a aussi son chemin dans le tableau de bord.
  • Les modifications propres à une page à l’intérieur d’une composition synchronisée, appelées remplacements (overrides), exigent WordPress 6.6 ou plus récent.

Comment fonctionne chaque type

Toutes les compositions créées dans l’éditeur sont stockées comme des publications du type wp_block. Un seul champ de métadonnées, wp_pattern_sync_status, décide comment WordPress les traite. Quand il est vide, la composition est synchronisée. Quand il vaut unsynced, elle ne l’est pas.

Une composition synchronisée est insérée comme un renvoi, pas comme une copie. La page stocke un seul bloc très court, <!-- wp:block {"ref":118} /-->, où 118 est l’identifiant de la composition. À chaque affichage, WordPress va chercher la publication 118 et affiche son contenu actuel. Modifiez la composition une fois, et chaque page qui y renvoie montre la nouvelle version à son prochain chargement.

Une composition non synchronisée sert de modèle de blocs. L’insérer copie ses blocs dans la page, et à partir de là, ces blocs appartiennent à la page. Modifiez la composition plus tard : rien de ce qui est déjà publié ne change, seules les prochaines insertions reçoivent la nouvelle version.

Schéma qui oppose une composition synchronisée, à laquelle les pages renvoient pour qu'une seule modification atteigne chaque page, à une composition non synchronisée, dont chaque page garde sa propre copie

Les compositions de thème sont une troisième source. Un thème les fournit dans son dossier patterns/, et une extension peut les enregistrer en PHP. Elles s’insèrent toujours comme des copies, à la manière des compositions non synchronisées, et vous ne pouvez pas les modifier depuis le tableau de bord parce qu’elles vivent dans des fichiers.

Les critères comparés

Ce qui compte pour vousComposition synchronisée (ancien bloc réutilisable)Composition non synchroniséeComposition de thème
Ce que la page stockeUn renvoi vers l’identifiant de la compositionUne copie complète des blocsUne copie complète des blocs
Une modification de la composition changeChaque page qui l’utilise, immédiatementSeulement les prochaines insertionsSeulement les prochaines insertions, après une mise à jour du thème
Modifications propres à une pageSeulement dans les blocs où les remplacements sont activés (6.6+)Tout, librementTout, librement
Où elle vitBase de données (publication wp_block)Base de données (publication wp_block)Fichiers du thème ou de l’extension
Qui peut la changerToute personne autorisée à modifier les compositionsToute personne autorisée à modifier les compositionsUn développeur, par un déploiement
Si la composition est suppriméeLes pages n’affichent rien à sa placeLes pages ne sont pas touchéesLes pages ne sont pas touchées
Copier une page vers un autre siteÉchoue : l’identifiant ne renvoie à rien là-basFonctionne : le contenu est dans la pageFonctionne : le contenu est dans la page

Deux lignes tranchent la plupart des cas. « Une modification change » est toute la raison d’être de la synchronisation : une seule correction répare chaque page. « Si la composition est supprimée » en est le prix. Une composition synchronisée est une dépendance : chaque page qui l’utilise dépend désormais d’une seule ligne de la base de données, qui doit rester publiée.

Vérifier ce que contient votre site

1. Listez toutes les compositions avec leur état de synchronisation. WP-CLI n’a pas de colonne pour ce champ de métadonnées ; affichez-le avec un court wp eval :

wp eval 'foreach ( get_posts( array( "post_type" => "wp_block", "numberposts" => -1, "post_status" => "any" ) ) as $p ) { $s = get_post_meta( $p->ID, "wp_pattern_sync_status", true ); printf( "%d\t%s\t%s\t%s\n", $p->ID, $s ? $s : "synced", $p->post_status, $p->post_title ); }'

Exemple de sortie :

118	synced	publish	Pricing disclaimer
131	unsynced	publish	Event announcement layout
140	synced	draft	Newsletter signup

Si la commande n’affiche rien, le site n’a aucune composition créée dans l’éditeur ; les compositions de thème ne sont pas des publications wp_block et n’apparaissent pas. Une composition synchronisée à l’état draft (brouillon) mérite votre attention : les pages qui l’utilisent n’affichent rien à sa place tant qu’elle n’est pas publiée.

Dans le tableau de bord, les administrateurs trouvent la même liste sous Apparence > Éditeur > Compositions avec un thème bloc, ou sous Apparence > Compositions avec un thème classique. Les éditeurs passent par /wp-admin/edit.php?post_type=wp_block. Certaines versions récentes nomment cette entrée Design quand le thème classique prend en charge les styles de l’éditeur. Dans l’outil d’insertion de blocs, les compositions synchronisées portent une petite icône en losange.

2. Trouvez toutes les pages qui utilisent une composition synchronisée. Remplacez 118 par l’identifiant obtenu à l’étape 1. Le motif [,}] empêche 118 de correspondre aussi à 1180 :

wp db query "SELECT ID, post_type, post_status, post_title FROM $(wp db prefix)posts WHERE post_content REGEXP '\"ref\":118[,}]' AND post_type <> 'revision'"

Exemple de sortie :

+-----+-------------+-------------+-----------------------+
| ID  | post_type   | post_status | post_title            |
+-----+-------------+-------------+-----------------------+
| 52  | page        | publish     | Pricing               |
| 207 | post        | publish     | Spring plans are live |
| 233 | wp_template | publish     | Single Posts          |
+-----+-------------+-------------+-----------------------+

C’est la liste des pages qu’une modification de la composition 118 va changer. Remarquez la ligne wp_template : une composition synchronisée placée dans un gabarit atteint chaque page que ce gabarit affiche, pas une seule page. Un résultat vide veut dire que rien ne renvoie à la composition : la modifier ou la supprimer ne touche aucun contenu publié.

3. Comptez les copies non synchronisées, au besoin. Les insertions non synchronisées ne laissent aucune trace qui mène à la composition, si bien qu’aucune requête exacte ne les retrouve. La méthode pratique consiste à chercher une phrase distinctive du contenu de la composition :

wp post list --post_type=page,post --s="Doors open at" --fields=ID,post_title

Exemple de sortie :

+-----+---------------------------+
| ID  | post_title                |
+-----+---------------------------+
| 301 | Autumn open house         |
| 322 | Winter workshop series    |
+-----+---------------------------+

Qui devrait choisir quoi

Choisissez une composition synchronisée quand le contenu ne doit jamais différer d’une page à l’autre et qu’une seule correction doit les atteindre toutes. Un texte juridique, un avis sur les prix, un formulaire d’abonnement intégré, des coordonnées et des heures d’ouverture s’y prêtent bien. Depuis WordPress 6.6, vous pouvez aussi activer les remplacements sur certains blocs de la composition, comme le titre et le texte du bouton. Vous obtenez alors une carte dont la mise en page reste verrouillée pendant que chaque page y met ses propres mots.

Choisissez une composition non synchronisée quand la composition est un point de départ. Une annonce d’événement, une rangée de membres de l’équipe ou une mise en page d’étude de cas se modifient page par page. Un changement ultérieur à la composition ne doit pas réécrire des pages déjà publiées.

Laissez-la au thème quand l’arrangement fait partie de l’image de marque et ne change qu’avec une nouvelle version. Les compositions de thème sont versionnées dans le code et ne peuvent pas être modifiées par accident depuis le tableau de bord. Les compromis d’une collection soignée de ces compositions sont traités dans bâtir et gérer une bibliothèque de compositions.

Un site qui mélange les trois est normal. Une répartition courante : les mises en page de marque dans le thème, et une poignée de compositions synchronisées pour les textes qui doivent rester identiques. Tout ce que les rédacteurs adaptent passe par des compositions non synchronisées.

Comment passer de l’une à l’autre

WordPress fixe le type à la création de la composition, avec l’option Synchronisée de la boîte de dialogue qu’ouvre Créer une composition. Synchronisée est activée par défaut. Les versions actuelles n’offrent aucun réglage pour changer le type ensuite : passer de l’un à l’autre veut donc dire créer une composition de l’autre type et modifier les pages qui utilisent l’ancienne. Le moyen le plus rapide d’obtenir cette seconde composition est Dupliquer, dans l’écran des compositions : la même boîte de dialogue s’ouvre, avec sa propre option Synchronisée.

De synchronisée à non synchronisée (pour qu’une modification ne change plus chaque page). Lancez l’étape 2 pour lister les pages. Ouvrez chacune d’elles, sélectionnez la composition et choisissez Détacher dans le menu d’options du bloc (les trois points). Détacher remplace le renvoi par une copie des blocs : la page garde le même contenu et ne suit plus la composition. Quand l’étape 2 ne renvoie plus aucune ligne, supprimez la composition synchronisée ou gardez-la pour de nouvelles pages. Si vous voulez que la mise en page reste offerte comme point de départ, créez une composition non synchronisée à partir des mêmes blocs avant de détacher la dernière copie.

De non synchronisée à synchronisée (pour qu’une correction atteigne chaque page). Ouvrez la mise en page de la composition sur une page et sélectionnez ses blocs. Choisissez Créer une composition dans le menu d’options, avec l’option Synchronisée activée. Ensuite, sur chaque page trouvée à l’étape 3, supprimez l’ancienne copie et insérez la nouvelle composition synchronisée à sa place. Vérifiez chaque page au passage : les modifications locales que la page avait apportées à sa copie sont perdues, puisque la composition synchronisée affiche le même contenu partout.

Déplacer des compositions vers un autre site. Dans l’écran des compositions, le menu d’actions de chaque composition propose Exporter en JSON, et l’écran des compositions du site cible peut importer ce fichier. Le JSON conserve l’état de synchronisation. La composition importée reçoit un nouvel identifiant : les pages copiées séparément renvoient encore à l’ancien. Réinsérez la composition sur ces pages.

Dépannage

Une composition synchronisée reste vide sur certaines pages. Le site public n’affiche rien dans trois cas : la composition n’est pas publiée, elle est protégée par mot de passe, ou elle a été supprimée. Lancez l’étape 1 et regardez la colonne d’état. Si l’identifiant est complètement absent de la liste, la composition a été supprimée ; l’éditeur affiche alors un avis indiquant que le bloc a été supprimé ou n’est pas disponible.

Une modification prévue pour une page a changé toutes les pages. La composition était synchronisée. Restaurez la version précédente depuis les révisions de la composition si le contenu compte, puis détachez cette page comme décrit plus haut avant de la modifier.

Vous ne pouvez pas modifier le texte d’une composition synchronisée dans une page. Le contenu synchronisé est verrouillé dans la page, et c’est voulu. Modifiez l’original, ce qui change chaque page, ou activez les remplacements sur ce bloc dans l’original (WordPress 6.6 ou plus récent) pour que chaque page puisse le remplir.

Une composition insérée dans une page copiée n’affiche rien. La page vient d’un autre site ou de la préproduction, et son ref renvoie à un identifiant qui n’existe pas ici. Exportez la composition du site source, importez-la, puis réinsérez-la dans la page.

Les compositions refusent de s’insérer ou affichent des erreurs de validation. C’est un autre problème, en général un bloc manquant ou un changement de thème. Réparer des compositions de blocs défectueuses le traite pas à pas.

Quand cette approche est la mauvaise

Pour un en-tête, un pied de page ou une barre latérale présents sur chaque page d’un thème bloc, utilisez une partie de gabarit plutôt qu’une composition synchronisée. Les parties de gabarit sont faites pour les zones communes à tout le site et s’assignent aux gabarits. Les conflits de parties de gabarit explique comment leurs copies en fichier et en base de données interagissent. Certains contenus doivent varier selon l’utilisateur, la date ou une requête, comme les trois derniers articles. Une composition, quel que soit son type, est statique : servez-vous plutôt des blocs de requête natifs ou d’un bloc personnalisé. La documentation de WordPress sur les compositions montre les boîtes de dialogue étape par étape.

Un WordPress qui rapporte vraiment mérite un opérateur — Stack Harbor opère cette pile sous WordPress Entreprise ; réservez une consultation d’infrastructure.