Comme annoncé, j’ai largué mes amarres aux centrales sociales le 31 août 2023 dernier et j’ai mis le cap sur la transformation de ce blog personnel en plateforme de partage de liens, de textes courts et d’articles plus classiques. Plutôt que de créer des types de publication, j’ai opté pour l’ajout de la prise en charge, par mon thème de blocs, des formats de publication, une fonctionnalité jusque là écartée par l’éditeur de site de WordPress.
Il y a un peu plus de 12 ans…
Le 23 février 2011, la version 3.1 de WordPress est publiée en l’honneur de Django Reinhardt, le célèbre guitariste de jazz français. À cette époque, le service Tumblr est fortement apprécié par les internautes pour la simplicité avec laquelle il permet de publier rapidement des « tumblelogs » c’est à dire des textes succincts ou des contenus plus riches comme des sons, des photos ou des vidéos.
Ce succès a certainement inspiré des contributeurs de WordPress influents car la fonctionnalité phare de la version 3.1 est précisément l‘introduction des formats de publication en vue de déléguer aux thèmes la création et la mise en forme de ces « tumblelogs ».
En passant, l’utilisation du terme « tumblelogs » par Matt Mullenweg dans l’annonce de la disponibilité de cette 3.1 semble clairement indiquer : « Utilisateurs, si vous êtes séduits par ce que propose Tumblr, vous pouvez aussi le faire dans WordPress : restez fidèles ! ». Notez que l’intérêt du cofondateur de WordPress a perduré au fil des années puisqu’il a fini par acheter Tumblr pour l’ajouter à la collection de services proposés par Automattic, son entreprise.
Les formats de publication : une fonctionnalité destinée aux thèmes
Si vous cherchez comment appliquer ces formats à vos publications, il y a statistiquement 5 chances sur 6 que vous ne trouviez pas (15% des thèmes hébergés sur WordPress.org semblent déclarer leur support des formats de publication – 1702/11319). Si vous collectionnez les thèmes par défaut inclus dans WordPress, vous augmentez très considérablement vos chances puisque 65% d’entre eux supportent la fonctionnalité.
En revanche, aucun des thèmes de blocks par défaut de WordPress ne s’est aventuré dans cette possible présentation différenciée de vos articles selon ces formats standardisés. C’est probablement lié au fait que l’éditeur de site ne sait pas (à ce jour ? pour toujours ?) les interpréter.
Pour ma part, j’ai immédiatement pensé à cette fonctionnalité comme un moyen alternatif pour diffuser sur mon site personnel les contenus que je partageais dans les centrales sociales, la nouvelle version (1.1.0) de mon thème de blocs « Ensemble » supporte donc les formats de publication. Précisément, il supporte 2 des 9 formats standardisés : le lien (ou « link ») et le statut (ou « status »). La déclaration de ce support est relativement simple, il suffit d’ajouter cette ligne de code dans le fichier functions.php
du thème :
add_theme_support( 'post-formats', array( 'link', 'status' ) );
NB : les autres formats disponibles sont aside
, gallery
, image
, quote
, video
, audio
et chat
.
Dès lors, lorsque vous rédigez un article, la barre latérale de l’éditeur de blocs s’enrichit d’une liste déroulante pour sélectionner le format que vous souhaitez appliquer à votre article.
Bénéficier des formats de publication dans l’univers des thèmes de blocs ?
Comme évoqué plus tôt, les thèmes de blocs semblent condamnés à devoir renoncer à proposer à leurs utilisateurs cette fonctionnalité. En effet, même si la hiérarchie des gabarits de blocs permet de contrôler depuis le thème l’affichage d’une boucle spécifique à un format en particulier, ce contrôle disparaît dans les boucles d’articles génériques.
En novembre 2021, Justin Tadlock, pourtant un supporter des formats de publication, se résigne à cette fatalité et semble se satisfaire de la possibilité d’utiliser des compositions de blocs (ou « patterns ») pour adapter leur présentation dans ces boucles.
De mon point de vue, cette situation n’est que partiellement satisfaisante dans la mesure où un article ne se limite pas à son contenu : il est également constitué d’un titre et de métadonnées comme son auteur, sa date de publication ainsi que les taxonomies auxquelles il est rattaché.
De plus, comme une composition de blocs s’initie très tôt dans le flux de chargement d’une page, en l’occurrence bien en amont de l’interprétation de la requête par WordPress, il n’est pas possible de conditionner son rendu en fonction de cette requête. La composition de blocs n’autorise pas non plus la transmission de propriétés ou d’un contexte : ce qui serait pourtant, à mon avis, fort utile pour personnaliser la présentation d’un article selon son format.
En l’absence de l’intégration native par WordPress des formats de publication pour les thèmes de blocs, et de l’absence d’une volonté de remédier à ce que je considère comme une régression, j’ai donc été contraint, pour atteindre mon objectif, de créer moi-même de toute pièce un mécanisme compensatoire.
Ma solution de contournement pour profiter des formats de publication dans mon thème de blocs
À la différence des compositions de blocs, le bloc accepte à la fois la transmission de propriétés et d’un contexte, j’ai donc choisi cet objet pour délimiter les portions de gabarit à rendre en fonction du format de chaque article d’une boucle générique (celle utilisée dans ma page listant l’ensemble des articles ou celle des résultats de recherche).
L’astuce de ce bloc consiste à confronter le format d’article passé en propriété par rapport à celui qu’il déduit du contexte qu’il reçoit de la boucle afin de décider si ses blocs enfants doivent être rendus ou non. Concrètement, dans l’exemple ci-dessous, le bloc ensemble/post-format-template
n’affichera le titre de l’article post-title
que si et seulement si le contexte du bloc confirme qu’il s’agit bien d’un article standard (aucun format appliqué).
<!-- wp:ensemble/post-format-template {"format":"standard"} -->
<!-- wp:post-title {"isLink":true,"level":2} /-->
<!-- /wp:ensemble/post-format-template -->
Par ailleurs, afin de m’assurer que la fonction de rappel de mon bloc dynamique puisse effectivement récupéré le format de publication de l’article courant d’une boucle, j’ai dû forcer l’exposition de la taxonomie utilisée pour faire persister les formats de publication au contexte de l’API REST de WordPress.
Pour personnaliser l’affichage individuel des articles utilisant un format de publication, j’ai décidé d’enrichir la hiérarchie des gabarits de WordPress d’un gabarit spécifique : « single-post-format-{$post_format}.php
 » qui est automatiquement traduit en « single-post-format-{$post_format}.html
 » pour les thèmes de blocs.
Pour finir et satisfaire ma pointillosité, j’ai également ajouté un lot de fonctions pour faire en sorte de personnaliser les URLs (et d’autres propriétés comme le nom, la balise title, le flux RSS des deux formats supportés par mon thème) menant aux boucles spécifiques à un format d’article. En effet, je préfère les termes « signet » et « brève » à « link » et « status ».
En passant, mes travaux sur le sujet des formats de publication m’ont permis de me rendre compte que depuis son lancement cette fonctionnalité est restée très rudimentaire. Le parti pris de ne pas autoriser l’ajout de nouveaux formats n’est certainement pas étranger à cet immobilisme.
Un bloc pour enrichir les liens partagés
J’ai de la suite dans les idées ! Il y a 11 ans, je trouvais déjà très pauvre le fait de créer un article avec pour seul contenu l’adresse URL du format de publication « lien ». Aujourd’hui j’améliore sensiblement le moyen que j’utilisais à l’époque pour récupérer l’illustration, le titre et la description de la page liée dans mon article grâce au bloc « signet » que j’ai intégré à mon thème.
La transformation de mon blog personnel en plateforme de partage de signets, de brèves et d’articles plus classiques a franchi une première étape importante : je peux diffuser ces contenus « pèle-mêle » dans mon flux de publications principal tout en laissant la possibilité au lecteur d’afficher le flux spécifique à chaque format de publication (articles, brèves et signets).
Après l’étape de diffusion, je compte m’intéresser à celle de la réception/réaction en reprenant mes travaux initiés sur une API visant à simplifier la création de types de commentaire personnalisés.