Extension WordPress
Cabrio
Options utiles
Les réglages qui manquent aux blocs de WordPress, et rien d’autre.

Version
1.44.1
mise à jour le 3 novembre 2026
Extension WordPress
WordPress
6.7 +

PHP
7.4 +
testée jusqu’à WordPress 7.1
Mises à jour
Signées
dans le tableau de bord
Langues
FR · EN
écrans et présentation
Licence
GPL
à adapter librement
Présentation
Ce que fait Cabrio Options utiles
Certains réglages manquent aux blocs de WordPress, et un thème n’est pas le bon endroit pour les ajouter : qu’on change de thème, et le réglage reste écrit dans les pages sans plus rien pour le lire. Cette extension les ajoute, une case à cocher pour chacun, dans Réglages, Options utiles.
- Niveaux de titre. Les blocs Derniers articles, Détails et Onglets affichent des titres qui n’en sont pas. Un niveau choisi dans le bloc en fait de vrais titres, que le plan de la page et les lecteurs d’écran retrouvent.
- Galeries. Une grille qui ouvre ses premières rangées et déplie les autres à la demande, une ligne qui défile avec deux flèches (une rangée de logos de clients), une disposition en maçonnerie, et un filtre par dossier de la médiathèque.
- Colonnage automatique. Un paragraphe, ou un groupe de paragraphes, qui se répartit tout seul en colonnes, autant qu’il en tient et une seule sur un téléphone.
- La visionneuse d’images. Le titre, la légende, la description et le rang d’une image sous elle une fois agrandie, et « Agrandir au clic » pour le bloc Média & texte, que WordPress ne donne qu’au bloc Image.
- Une catégorie principale pour chaque article, quand aucune extension de référencement n’en propose.
- Les fichiers SVG dans la médiathèque, nettoyés à l’arrivée, pour les administrateurs.
- Le formulaire de commentaire sans son champ Site web.
- Les liens vers d’autres sites ouverts dans un nouvel onglet, chaque lien gardant son propre choix.
- Site Reviews : la date de la prestation à côté de chaque avis.
- « 1er » pour le premier du mois, comme l’écrit le français.
- Les pages privées gardées dans les menus pour qui peut les lire.
- SEOPress : son bouton « Accepter » ne vaut que pour la mesure d’audience, pas pour la publicité.
Les options qui changent ce que voient les visiteurs ou ce que demande un formulaire public sont décochées au départ ; les autres sont actives dès l’extension activée.
Dans le détail
L’apparence reste au thème
L’extension écrit une balise de titre et une classe, jamais une couleur, une taille ni une police. Un titre prend l’apparence que le thème actif donne à ce niveau. Le peu de CSS fourni place les choses (les rangées repliées d’une galerie, les mots sous une image agrandie) et la moindre règle du thème l’emporte.

Mises à jour
Signées
Mise à jour depuis le tableau de bord
Installation
En place
en quelques gestes
- Téléversez le dossier
cab-useful-optionsdans/wp-content/plugins/, ou le zip par Extensions, Ajouter, Téléverser. - Activez-la.
- Cochez ou décochez les options dans Réglages, Options utiles. Les réglages de chaque bloc sont dans la colonne du bloc, dans l’éditeur.
Questions
Vos questions
Que deviennent mes pages si je la désactive ?
Rien n’est perdu. Les niveaux de titre et les réglages des galeries restent écrits dans les pages, et les blocs s’affichent comme WordPress les dessine. Réactivez l’extension et tout revient.
Efface-t-elle ses données à la désinstallation ?
Seulement si la dernière case de son écran de réglages, Désinstallation, est cochée. Sinon tout reste en base, prêt pour une réinstallation.
Avis
Ce qu’en disent ses utilisateurs
Pas encore d’avis sur Cabrio Options utiles : le vôtre peut être le premier.
Donner votre avis sur Cabrio Options utiles
Votre avis paraît après relecture. Votre adresse électronique sert seulement à vous répondre si besoin : elle n’est jamais publiée. Comment nous traitons les avis
Historique
Son histoire
Cabrio Options utiles 1.44.1
Plus de boucle sans fin dans l'editeur. Le filtre de galerie par dossier (assets/js/editor-gallery-filter.js) enveloppe tous les blocs et lisait les dossiers avec un identifiant vide pour ceux qui ne sont pas une galerie : la lecture rendait un objet neuf a chaque appel, l'editeur y voyait un changement permanent et redessinait sans fin (erreur React 185). Les blocs WooCommerce, qui relisent beaucoup le magasin de donnees, tombaient en « Ce bloc a rencontre une erreur » : produit, prix, note, resume, tous les avis (page exemple de Dolce Machja, signale par Cyrille le 3 novembre 2026). Sans galerie, la lecture rend null ; une galerie sans image de la mediatheque rend un objet constant.
Version 1.44.0
Colonnage automatique, sur les blocs Paragraphe et Groupe (Automatic columns, inc/text-columns.php et assets/css/text-columns.css) : le texte coule d'une colonne dans la suivante, autant qu'il en tient, une seule sur un telephone ; dans un groupe, une image, une galerie, un tableau ou une citation traverse les colonnes. Le style vivait dans le theme cab-miniworld (Texte en colonnes, 3.19.0) : sous un autre theme, la page exemple de cabrio-informatique ne coulait plus en colonnes, ni sur le site ni dans l'editeur (demande de Cyrille le 3 novembre 2026). La feuille part avec le bloc, dans le canevas de l'editeur comme sur la page, et ne pose que la mise en page ; un filet entre les colonnes est l'affaire du theme. Les contenus ecrits sous l'ancien nom du theme, is-style-cab-texte-colonnes, coulent aussi. Une carte Blocs Paragraphe et Groupe dans les reglages, allumee par defaut. Essaye sous cab-informatique, cab-miniworld et Twenty Twenty-Five, sur le site et dans l'editeur.
Version 1.43.1
Les fleches d'une galerie defilante ne touchent plus les images. Dans la galerie depuis la 1.43.0, elles tombaient sous la regle du coeur qui remet a zero la marge de chaque enfant d'une mise en page flex, .is-layout-flex > :is(*, div), du meme poids que la notre et servie apres (page exemple de cabrio-informatique, signale par Cyrille le 3 novembre 2026). La regle de place vise aussi figure > div.cab-uo-scroll-nav, (0,1,2) : devant le coeur, toujours derriere un theme qui place les fleches lui-meme.
Version 1.43.0
Le fond d'une galerie defilante passe sous ses fleches. Les images defilent desormais sur une piste a elles, div.cab-uo-scroll__track, posee par le serveur dans la galerie (inc/gallery-scroll.php) ; la galerie garde fond, bordure, arrondi et marges, et le script range les fleches entre la piste et la legende. Jusqu'ici la galerie defilait elle-meme et les fleches suivaient le bloc, sur le fond de la page : signale par Cyrille le 3 novembre 2026, un fond blanc sur une page nuit laissait une bande noire sous les fleches. Les largeurs d'images du coeur suivent les images dans la piste, qui reprend l'ecart de la galerie. Une page mise en cache avant la 1.43.0 garde l'ancienne facon. Dans l'editeur, ou React tient les images dans la galerie, la barre reste apres le bloc et en reprend le fond et les marges interieures. Elle ne compte plus la legende de la galerie, rangee la au bout de la ligne : une galerie legendee de trois images sur trois colonnes montrait des fleches. Les themes qui dessinent les fleches doivent viser .wp-block-gallery div.cab-uo-scroll-nav : cab-informatique 1.48.1 et cab-miniworld 3.70.4 le font.
Version 1.42.0
Les mots de la date de l'experience se reglent : le filtre cab_uo_service_date_words rend le libelle du champ, la phrase a cote de la date de publication et les deux refus, selon l'avis affiche, l'envoi verifie ou le formulaire construit. Un avis sur une extension date une utilisation, pas une prestation : le theme cab-informatique 1.46.0 s'en sert pour les avis des pages de ses extensions. Rien ne change sans le filtre.
Versions précédentes
1.41.0
Mises a jour par le Depot de Cabrio Informatique. L'extension declare son adresse de mise a jour (Update URI) et embarque le module du Depot (inc/cab-depot-client/, 1.0.3) : WordPress propose ses nouvelles versions dans Extensions, comme pour celles du repertoire officiel, et le paquet n'est installe que si sa signature est bonne. La cle de licence se saisit dans Reglages, Licence Cabrio. Readme au format de WordPress (en-tete, Description, Installation, Questions frequentes) devant le manuel, qui reste tel quel, et readme-fr_FR.txt. Adresse de l'extension : https://cabrio-informatique.com/extensions-wordpress/cabrio-options-utiles/.
All of this shipped on 23 September 2026, the day the plugin was written.
1.40.5
Correctif de l'option "Accepter ne vaut que pour la mesure d'audience" (1.36.0) : "Uncaught RangeError: Maximum call stack size exceeded" dans gtag.js, a chaque envoi, pour qui avait accepte les cookies, et donc plus aucune mesure. L'enveloppe de dataLayer.push rangeait derriere elle la fonction que gtag.js pose ; or gtag.js garde le push qu'il trouve (var e=c.push) et le rappelle a chaque envoi (e.apply(c,h)) : l'enveloppe rappelait Google, qui rappelait l'enveloppe. Chaque fonction posee recoit maintenant sa propre enveloppe, et le push que Google garde mene au push d'origine. inc/seopress.php. Signale par Cyrille le 28 octobre 2026, en ligne et en local. Verifie en local en reproduisant le geste de gtag.js, deux fois de suite : chaque envoi passe une fois, sans erreur, et une commande de consentement garde ses trois signaux publicitaires refuses.
1.40.4
Les deux dates d'un avis en trois elements : "Publie le …" (cab-uo-review-published), le point median (cab-uo-review-separator) et "Prestation : …" (cab-uo-review-service), avec la majuscule. Sur deux lignes, le point qui finit la premiere ne sert plus a rien : un theme peut maintenant le cacher (cab-informatique 1.41.4 le fait). La chaine "%1$s · service: %2$s" devient "Service: %s" ("Prestation : %s"). Site Reviews n'echappe pas cette valeur : chaque texte est echappe par l'extension. Demande de Cyrille le 28 octobre 2026.
1.40.3
La ligne "Publie le … · prestation : …" des avis ne se coupe plus qu'apres le point median : chaque moitie reste d'un tenant (espaces insecables), une date ne se separe pas de son mois. Dans une colonne etroite, elle se coupait n'importe ou ("1er novembre / 2023"). inc/site-reviews.php. Remarque de Cyrille le 28 octobre 2026, sur telephone, avec le theme cab-informatique 1.41.3 qui laisse enfin cette ligne passer a la ligne.
1.40.2
Sur un telephone, la photo agrandie s'aligne sur son texte : sous 480 px de large, le coeur ne laisse aucune marge sur les cotes, et la photo touchait les bords de l'ecran, cadre arrondi compris, pendant que le texte se tenait a 16 px (assets/js/lightbox-texts.js : la photo ne depasse plus la largeur du texte). Au-dela, le coeur laisse deja ses marges et rien ne change. Remarque de Cyrille le 28 octobre 2026, Samsung Galaxy A55 (360 x 800). Mesure : cadre et texte a 16 px, 328 px de large ; a 1280 x 800, cadre inchange (918 x 686).
1.40.1
"Agrandir au clic" du Media & texte passe dans le menu du lien, la ou le coeur le met pour une image ; la 1.40.0 en faisait une case du panneau. Remarque de Cyrille le 28 octobre 2026 : "tu ne l'as pas place au meme endroit que WordPress". Le composant du menu ne peut toujours pas etre remplace (accesseur non configurable : affectation ignoree, redefinition refusee, remesure sur WordPress 7.1.3), mais il peut etre employe : assets/js/editor-lightbox.js en pose un second dans le meme groupe de la barre d'outils, avec les quatre proprietes du bloc Image et sa logique (onSetLightbox, resetLightbox, showLightboxSetting, lightboxChecked), et inc/media-text-lightbox.php masque dans la feuille de l'editeur le bouton du coeur, qui le precede immediatement. Les fleches du clavier enjambent le bouton masque, que la barre compte encore (mesure : deux pressions pour le passer, une seule desormais, dans les deux sens). Le panneau "Dans la visionneuse" ne garde que la liste des textes. Deux chaines de la case retirees, l'aide de l'option reecrite. Essaye dans l'editeur de la page 144 de cabrio-informatique-fse, sans enregistrer : un seul bouton "Lien", menu du coeur avec "Lien vers le fichier image", "Lien vers la page du fichier joint" et "Agrandir au clic" ; le choisir retire le lien, ecrit "lightbox":{"enabled":true}, bloc valide.
1.40.0
"Agrandir au clic" sur l'image d'un Media & texte, que le coeur ne donne qu'au bloc Image. Remarque de Cyrille le 28 octobre 2026, apres la 1.39.0 : tout marchait, sauf sur l'image d'un Media & texte, ou l'option n'existe pas. Nouvelle carte "Media & Text block", option "Enlarge on click", allumee par defaut (elle n'ajoute qu'une case au bloc). Nouveau module inc/media-text-lightbox.php, repris du theme cab-miniworld (3.23.0) : la figure du media est confiee a block_core_image_render_lightbox() du coeur, avec la seule classe du bloc Image le temps de l'appel ; les textes de la visionneuse suivent (cab_uo_lightbox_media_texts(), sans legende de page). L'attribut est celui du bloc Image, lightbox: { enabled }, celui que demande le ticket Gutenberg 83341 : sans choix, le site decide comme pour une image ; liee, l'image garde son lien ; allumer la case dans l'editeur retire le lien. L'option s'efface sous cab-miniworld, et sous un coeur qui declarerait l'attribut lui-meme. Le script de l'editeur devient assets/js/editor-lightbox.js (ancien editor-lightbox-texts.js) : un seul panneau "In the viewer" porte la case du Media & texte et la liste des textes. Essaye sur cabrio-informatique-fse, page 144 : rendus en memoire (sans choix, allume, allume mais lie, titre seul, video), visionneuse ouverte au vrai clic avec titre et description, mise en page du bloc identique au pixel, case allumee dans l'editeur (lien retire, bloc valide, sans enregistrer).
1.39.0
Les textes de la visionneuse : sous une image agrandie au clic, son titre, sa legende, sa description, et dans une galerie un compteur "3 / 9". Quatre interrupteurs dans une nouvelle carte "Image viewer (Enlarge on click)", eteints par defaut ; une galerie peut choisir pour ses images, et une image pour elle-meme, dans le panneau "In the viewer" de leurs reglages (attribut cabLightboxText, celui du theme cab-miniworld). Demande de Cyrille le 27 octobre 2026 ; le modele retenu le 28 est celui de Simple Lightbox, le texte SOUS la photo, a la police et a l'encre du theme. Nouveau module inc/lightbox-texts.php : les textes de chaque image vont dans l'etat core/image du coeur, le compteur reprend l'ordre que le coeur donne aux images d'une galerie, et la visionneuse, imprimee par la fonction du coeur appelee a sa place, recoit un bloc lu par des directives de l'API Interactivity. assets/js/lightbox-texts.js retrecit la photo pour faire la place au texte et recalcule le depart du zoom ; assets/css/lightbox-texts.css le place, sans couleur ni police ; assets/js/editor-lightbox-texts.js porte la liste de l'editeur. Sous un theme qui ecrit deja ses propres textes dans la visionneuse (cab-miniworld), les quatre options sont grisees et disent pourquoi. Essaye sur cabrio-informatique-fse sous cab-informatique et Twenty Twenty-Five, a 1280 x 800 et 375 x 812 : le zoom part de la vignette, le texte suit les fleches.
1.38.0
Les fleches de la galerie defilante paraissent aussi dans l'editeur, comme sur la page : memes boutons, memes classes (le theme les dessine pareil), meme pas d'une image a l'autre, meme retour au debut apres la derniere ; elles se cachent quand tout tient sur la ligne. La barre de defilement grise que l'editeur montrait a leur place s'en va ; elle ne revient qu'a une galerie que ne suivent pas les fleches, si leur script manquait. Nouveau script assets/js/editor-gallery-scroll.js (charge dans l'editeur par inc/gallery-scroll.php, avec les mots "Previous pictures" et "Next pictures" du catalogue PHP), sur le modele du bouton "Voir plus" de la grille depliante : rendu apres le bloc par editor.BlockListBlock, ecoute posee sur le noeud. L'appui s'arrete a la descente (preventDefault) : sinon l'editeur prenait l'appui et le focus pour selectionner un bloc, le canevas se decalait et le clic n'avait jamais lieu (mesure au vrai pointeur). Remarque de Cyrille le 26 octobre 2026, sous Twenty Twenty-Five.
1.37.2
Les fleches de la galerie defilante prennent le bouton du theme, comme le bouton "Voir plus" de la grille depliante : elles portent aussi la classe wp-block-button__link (assets/js/gallery-scroll.js), et la galerie demande la feuille du bloc Bouton (inc/gallery-scroll.php), que WordPress ne sert que si un bloc Bouton parait sur la page. Sous Twenty Twenty-Five elles sortaient en rectangles noirs a cote d'un "Voir plus" en pilule : la pilule de ce theme est dans la feuille du bloc Bouton, sur wp-block-button__link. Remarque de Cyrille le 26 octobre 2026, theme Twenty Twenty-Five sur cabrio-informatique-fse. Sous cab-informatique, qui dessine lui-meme ces fleches (disques a chevron), rien ne change.
1.37.1
Retire l'option "Messages in the site's language" de la 1.37.0 : Site Reviews le fait lui-meme, dans ses reglages, onglet Chaines (textes personnalises), ou les messages manquants se traduisent sans extension de plus. Sur cabrio-informatique, les trois phrases absentes de sa traduction francaise y sont traduites (envoi a relire, echec de l'avis, echec du formulaire). inc/site-reviews-messages.php, l'option et ses chaines partent ; "The first of the month" reste. La 1.37.0 n'a ete ni installee ni poussee.
Remarque de Cyrille le 26 octobre 2026.
1.37.0
Deux options. "Messages in the site's language" (carte Site Reviews, allumee par defaut) : la traduction francaise de Site Reviews n'a pas le message lu apres l'envoi d'un avis a relire ("Your review has been submitted and is pending approval.") ni celui de l'echec ; inc/site-reviews-messages.php les donne dans la langue du site (filtre gettext_site-reviews), seulement tant que Site Reviews ne les traduit pas et la ou cette extension a une traduction : un site en anglais garde ses mots. "The first of the month" (nouvelle carte Dates, famille Contenus, eteinte par defaut) : sur un site en francais, inc/dates.php ecrit "1er octobre" au lieu de "1 octobre" (filtre wp_date), seulement le premier du mois et devant un mois en lettres, le jour lu dans le fuseau de la date. Le readme dit enfin les six options eteintes par defaut et l'option de la 1.36.1 retiree a la desinstallation.
Essaye sur cabrio-informatique-fse : les deux messages en francais, celui de l'avis publie aussitot garde la traduction de Site Reviews, l'anglais garde le texte d'origine ; "1er octobre 2026", "1er novembre 2023", "01 octobre", "1/10/2026", "11 octobre", "21 octobre" ; 31 octobre 23 h 30 UTC ecrit "1er novembre" a Paris ; date_i18n et mysql2date suivent ; "prestation : 1er octobre 2026" sur la page Depannage. Traductions refaites (144 messages, aucun tableau).
Demande de Cyrille le 26 octobre 2026 pour cabrio-informatique.
1.36.1
La date de la prestation n'est plus effacee quand on enregistre un avis dans l'administration. Site Reviews grise les details d'un avis tant que "Modifier les details" n'est pas coche, n'envoie rien de grise, et remet a vide tout champ personnalise qu'il n'a pas recu (ReviewController:: updateReview, sur post_updated) : publier l'avis d'un visiteur, lui donner une categorie ou y repondre effacait sa date. Constate sur cabrio- informatique : trois avis de visiteurs sur trois, sans date. La date est lue avant l'enregistrement (pre_post_update) et remise apres celui de Site Reviews (post_updated, priorite 99), sauf si le champ a ete envoye : une date videe expres, details ouverts, reste vide. Les dates deja effacees reviennent une fois, depuis l'envoi du visiteur que Site Reviews garde (_submitted), seulement pour un avis sans date et une date lisible et passee (option _cab_uo_service_dates_recovered, retiree a la desinstallation).
Essaye en local : avis envoye par le formulaire avec sa date, publie depuis sa fiche sans ouvrir les details, date conservee ; date corrigee details ouverts, enregistree ; date effacee par la 1.36.0, rendue par la reprise.
Demande de Cyrille le 26 octobre 2026 pour cabrio-informatique.
1.36.0
Avec SEOPress, « Accepter » n'accorde plus que la mesure d'audience (option "Accept means audience measurement only", carte SEOPress, famille Extensions ; eteinte par defaut, la carte n'apparait que si SEOPress est actif). SEOPress accordait aussi les trois signaux publicitaires du mode de consentement de Google (ad_storage, ad_user_data, ad_personalization), et le script de Google envoyait une requete de conversion publicitaire. Les trois signaux restent refuses la ou SEOPress les accorde : charge utile (filtre seopress_user_consent), script de tete (file dataLayer enveloppee avant lui, et encore quand Google la remplace), clic (fonction gtag() enveloppee apres lui). analytics_storage passe tel quel.
Demande de Cyrille le 21 octobre 2026 pour cabrio-informatique.
1.35.0
Les pages privees restent dans le menu pour qui peut les lire (option "Private pages in menus", carte Navigation block, famille Blocs du coeur ; allumee par defaut, elle n'ouvre aucune porte). Le coeur retire du bloc Navigation tout lien vers un contenu non publie, meme pour l'administrateur. Le filtre du coeur render_block_core_navigation_link_allowed_post_status (WordPress 6.8) recoit "private" lien par lien, seulement quand la personne connectee a le droit read_post sur ce contenu : administrateur, editeur, auteur de la page. Rien ne change pour les visiteurs.
Demande de Cyrille le 21 octobre 2026 pour cabrio-informatique.
1.34.0
La date de la prestation a cote de chaque avis de Site Reviews (option "Date of the service", carte Site Reviews, famille Plugins ; eteinte par defaut, la carte n'apparait que si Site Reviews est actif). Le Code de la consommation (D111-10, 1° b) veut, a cote de chaque avis, la date de publication ET celle de la prestation ; Site Reviews n'affiche que la premiere. Le formulaire d'avis demande la date, obligatoire, jamais a venir ; la fiche d'un avis, dans l'administration, la montre et la laisse corriger (le mois seul suffit pour un avis ancien) ; la date d'un avis se lit "Publie le … · prestation : …". Champ personnalise de Site Reviews (cab_service_date) : l'avis le garde si l'extension s'en va.
Demande de Cyrille le 20 octobre 2026 pour cabrio-informatique.
1.33.0
Un style "Defilant" pour le bloc Galerie : les images sur une seule ligne, deux fleches pour aller le long. Allume par defaut, comme les autres styles de galerie : un style de plus dans le panneau Styles ne change aucune page.
Demande de Cyrille le 19 octobre 2026 pour cabrio-informatique, en remplacement de WP Links Page Pro : "les sites des clients qui nous font confiance", huit logos, le nom dessous, un lien vers chaque site, aux fleches seulement. Le contenu est une galerie ordinaire du coeur ; seul le defilement est a l'extension.
Nouveau module inc/gallery-scroll.php, option "Defilant" dans la carte Galerie. assets/css/gallery-scroll.css (lie au bloc par wp_enqueue_block_style, donc servi aux seules pages qui portent une galerie, et dans le canevas de l'editeur) : la galerie ne passe plus a la ligne (flex-wrap: nowrap), defile en largeur, aimantee image par image (scroll-snap) ; les images gardent la largeur que le coeur leur donne d'apres le nombre de colonnes. Dans l'editeur, la barre de defilement revient, puisque les fleches n'y sont pas. assets/js/gallery-scroll.js, charge par le rendu d'une galerie qui porte le style et nulle part ailleurs : deux boutons nus apres la galerie (classes wp-element-button, cab-uo-scroll__button–previous et –next, nom accessible "Images precedentes" / "Images suivantes", aria-controls), le pas lu entre deux images (ecart compris), retour au debut apres la fin et inversement, barre cachee quand tout tient sur la ligne. Mouvement adouci sauf si prefers-reduced-motion. Pas de defilement automatique (WCAG 2.2.2).
L'extension n'habille pas les fleches : centrees sous la ligne, sans couleur ni forme ; le theme les dessine et les place. Sans script, la ligne defile quand meme au doigt et au pave tactile.
Essaye sur cabrio-informatique (theme cab-informatique 1.27.0, page Sites internet) : huit logos, deux a la fois, fleches de part et d'autre, aller et retour par de vrais clics ; 390 et 1440 px sans debordement ; blocs valides dans l'editeur. Catalogue francais : 4 chaines (style, aide, deux fleches).
1.32.1
Demarrage : plus de 5 000 requetes SQL de moins par page. Le reglage "Categorie principale" comptait les articles en base pour sa ligne d'etat a chaque lecture des reglages, et le filtre qui declare l'attribut de niveau de titre au serveur (register_block_type_args) lit les reglages pour chaque bloc enregistre : pres de 300 blocs avec WooCommerce, donc autant de comptages a chaque requete, visiteurs compris. Sur Boutik Douchouchou, le seul crochet init passait de 1,7 s a 0,2 s en local (en ligne, environ une seconde de demarrage). La ligne d'etat ne se calcule plus qu'a l'affichage de l'ecran de reglages (cle status_callback), et la liste des blocs equipes est gardee le temps de la requete. Memes attributs declares sur les memes blocs, mesure avant et apres ; ligne d'etat toujours affichee.
1.32.0
Grille depliante : le bouton "Voir plus" ne colle plus aux images, et sa place se choisit (gauche, centre, droite).
Signale par Cyrille le 13 octobre 2026 sous Cabrio Informatique, dont l'espace entre blocs vaut zero : le bouton, pose juste apres la galerie, touchait les photographies. Il demande que l'extension s'en charge, "comme ca plus de probleme avec de futurs themes".
- L'ecart en repli : le script regarde l'espace que le theme donne au bouton et, seulement s'il n'en donne aucun, lui donne l'ecart des rangees de la galerie (classe
cab-uo-gallery-more--spaced, variable--cab-uo-gallery-gap). Un theme qui l'espace deja garde son ecart : mesure inchange sous CabMiniWorld (16 px) et Twenty Twenty-Five (19,2 px), 7 px sous Cabrio Informatique, comme entre les rangees. Meme chose dans le canevas de l'editeur. - L'alignement : nouveau reglage "Alignement du bouton" dans le panneau "Grille depliante" de la galerie (attribut
cabGalleryButtonAlign, ecrit endata-cab-uo-align). Aucun choix coche d'avance : sans choix, le theme decide (CabMiniWorld centre, les autres laissent a gauche), et un second clic defait le choix. Gauche et droite valent debut et fin de ligne, comme la justification du bloc Boutons. Mesure sous les trois themes, sur la page et dans l'editeur. - Toujours aucune robe : deux regles de place, en deux classes pour passer devant la mise en page du coeur et devant un theme qui centre sans qu'on le lui demande.
- Traductions : cinq chaines, dans le .po, le .mo, le .l10n.php et le JSON du script de l'editeur.
1.31.0
Les liens vers d'autres sites : la case "Ouvrir dans un nouvel onglet" est cochee d'avance dans l'editeur, et plus rien n'est force a l'affichage.
Demande de Cyrille le 7 octobre 2026, apres la 1.30.0 : "quand cette option est cochee, tu ne peux pas tout simplement activer la coche 'ouvrir dans un nouvel onglet' lors de la creation du lien s'il est externe ? Comme cela, ca nous laisse le choix normal."
La 1.30.0 ouvrait les liens externes au moment de l'affichage. Pour en garder un dans le meme onglet, il fallait une classe CSS sur le bloc ou du HTML a la main : l'interrupteur de l'editeur, une fois decoche, ne laisse aucune trace dans le contenu, et rien ne distinguait "decoche expres" de "jamais touche".
Le coeur n'offre aucune prise pour cocher la case d'avance : sa bulle de lien (format-library, createLinkFormat) ne pose target="_blank" que si l'interrupteur est allume, sans filtre. Nouveau script assets/js/editor-links.js, charge dans l'editeur quand l'option est allumee : il observe le bloc selectionne, et un lien qui vient d'y apparaitre, vers une autre adresse, sans cible, recoit target="_blank" et rel="noopener", ce qu'ecrirait l'interrupteur. La bulle le montre coche ; on le decoche, et c'est ce choix qui est enregistre. Le premier regard sur un bloc ne touche rien : seuls les liens nouveaux depuis ce regard sont coches, donc un lien decoche n'est jamais recoche, sauf si son adresse change pour un autre site. Texte riche (paragraphe, titre, liste, citation…), bouton et image (linkTarget), lien et sous-menu de navigation (opensInNewTab). Ctrl+Z annule le lien avec sa coche, pas la coche seule.
Essaye sur cabrio-informatique, WordPress 7.1, par la vraie bulle de lien : Ctrl+K sur un texte, adresse de la CNIL, Entree, la bulle montre la case cochee ; decochee et appliquee, elle le reste, y compris apres avoir tape du texte et cree un second lien (Legifrance), qui lui est coche. Par l'API des blocs : lien interne, mailto: et tel: non coches, bouton et image coches puis decoches durablement, bloc colle deja garni laisse tel quel, blocs valides.
inc/links.php ne force plus rien : plus de target pose a l'affichage, plus de classe cab-uo-meme-onglet ni de marqueur data-cab-uo-onglet. Il ne garde que l'annonce aux lecteurs d'ecran, sur tout lien target="_blank", et la phrase cachee en bas de page. Les liens ecrits avant restent tels qu'ils sont : sur un site qui comptait sur la 1.30.0, il faut les cocher une fois dans le contenu.
Le texte d'aide de l'option est reecrit, et traduit. Le readme dit aussi que cette option est eteinte par defaut, ce que la 1.30.0 avait oublie.
1.30.0
Les liens vers d'autres sites dans un nouvel onglet. Eteint par defaut.
Demande de Cyrille le 7 octobre 2026 pour cabrio-informatique : "les liens externes s'ouvrent dans le meme onglet, change ca", puis "laisse-nous la possibilite de le changer a chaque lien".
Nouveau module inc/links.php, et dans la famille "Contenus" une carte "Liens" avec l'option "Ouvrir les autres sites dans un nouvel onglet". A l'affichage (render_block), tout lien http(s) vers une autre adresse que celle du site (avec ou sans www) recoit target="_blank", rel="noopener" et une description pour les lecteurs d'ecran, une seule phrase cachee en bas de page. Les liens internes, mailto: et tel: ne changent pas. Rien n'est ecrit dans le contenu.
Le choix de chaque lien passe avant : un lien qui a deja une cible (celle de l'interrupteur de l'editeur, ou target="_self" a la main) n'est pas touche. Un bloc qui porte la classe cab-uo-meme-onglet garde ses liens dans le meme onglet, ses blocs interieurs compris : il leur ecrit target="_self", sans quoi le bloc parent, qui passe apres, les rouvrirait ailleurs. Les liens que l'option ouvre elle-meme portent data-cab-uo-onglet : c'est elle, et non la description, qui dit au bloc "meme onglet" lesquels reprendre. Un lien deja ouvert ailleurs par l'editeur recoit seulement l'annonce aux lecteurs d'ecran, que le coeur n'ecrit pas.
Essaye sur cabrio-informatique : sept cas rendus par do_blocks (lien simple, interrupteur de l'editeur, target="_self" a la main, paragraphe, groupe dans un groupe, bouton, interne/mailto/tel/protocole relatif), puis la page Mentions legales servie : Legifrance, CNIL, Hostinger, Unsplash et Facebook dans un nouvel onglet, liens internes, e-mail et telephone inchanges. Catalogue francais : 4 chaines ajoutees, description mise a jour.
Eteinte par defaut : une mise a jour ne doit pas changer la facon dont s'ouvrent les liens d'un site sans qu'on l'ait demande.
1.29.0
Un formulaire de commentaire sans son champ "Site web". Eteint par defaut.
Demande de Cyrille le 7 octobre 2026 pour cabrio-informatique, avec la fermeture des retroliens : "les fermer".
Nouveau module inc/comments.php, et dans la famille "Contenus" une carte "Commentaires" avec l'option "Sans champ Site web". Trois endroits : le champ quitte le formulaire, la case du temoin ne promet plus de retenir le site (la phrase du coeur, traduite par le coeur, est la seule remplacee), et une adresse envoyee quand meme est ecartee a l'enregistrement, puisqu'un robot poste directement sans voir le formulaire. Un membre connecte garde le site de son profil ; les commentaires publies gardent le leur.
Eteinte par defaut, comme l'option SVG : une mise a jour ne doit pas changer un formulaire public sans qu'on l'ait demande (cab_uo_off_by_default).
Essaye sur cabrio-informatique : formulaire sans le champ, case "Enregistrer mon nom et mon e-mail dans le navigateur pour mon prochain commentaire", adresse d'un visiteur videe avant l'enregistrement. Sur CabMiniWorld local, l'option reste eteinte. Catalogue francais : 4 chaines ajoutees, description mise a jour.
1.28.0
Les fichiers SVG dans la mediatheque, nettoyes a l'entree, pour les administrateurs. Eteint par defaut.
Demande de Cyrille le 7 octobre 2026, pour le logo de Cabrio Informatique redessine en SVG : "inclure la deuxieme a cab-useful-options", la deuxieme etant une extension maison plutot que Safe SVG.
Nouveau module inc/svg.php et nouvelle famille dans l'ecran, "Mediatheque", avec une carte "Fichiers SVG" et l'option "Accepter les fichiers SVG". C'est la premiere option eteinte par defaut : cab_uo_off_by_default() donne la valeur d'une option absente de la base, et une mise a jour ne doit pas ouvrir une porte sans qu'on l'ait demande.
Le nettoyage suit une liste de ce qui est permis. Ce qu'un logiciel de dessin laisse part sans un mot ; ce qui peut agir fait refuser le fichier, avec ce qu'on y a trouve. Les attributs sont lus sans leurs cles : href et xlink:href se seraient ecrases dans le tableau, et le second n'aurait jamais ete lu.
Le coeur ne tient pas un SVG pour une image : sans dimensions, le bloc Logo du site n'affichait rien. Largeur et hauteur ecrites en metadonnees, depuis le viewBox, et image_downsize repond pour toutes les tailles.
Essaye sur CabMiniWorld local avec 22 fichiers : le logo et un export facon Illustrator passent, nettoyes ; 20 fichiers pieges sont refuses (script en majuscules ou en XHTML, onload, onclick, foreignObject, lien javascript, use externe, href doublee, java script, @import, url externe, data:, DOCTYPE et entite, set attributeName, image incorporee, XML casse, racine qui n'est pas svg, svg sans espace de noms, svgz). Puis sur cabrio-informatique, en vrai : import refuse pour un fichier piege et pour un appel sans utilisateur, logo importe par l'administrateur (792 x 155), vignette dans la mediatheque, bloc Logo du site a 150 x 29 dans l'en-tete.
1.27.0
Effacer ses donnees a la desinstallation devient un choix, decoche par defaut.
Demande de Cyrille avant de pousser la 1.26.0 : "prevois une option de suppression des bases de donnees de mon plugin lors de la desinstallation".
Jusque-la, la desinstallation effacait toujours les reglages, et depuis la 1.25.0 la categorie principale de chaque article, sans rien demander. Or cette copie est precisement ce qui garde les adresses en place quand une extension de referencement s'en va : la perdre sur une simple reinstallation aurait deplace des adresses.
Une derniere section dans l'ecran, "Desinstallation", avec une case "Effacer les donnees de l'extension a la desinstallation", rangee dans sa propre option _cab_uo_delete_on_uninstall (booleen, faux par defaut) et non dans les reglages des blocs. L'ecran dit avant qu'on coche ce qui part, et sa consequence sur les adresses, et ce qui reste toujours : ce qui est ecrit dans les contenus.
Decochee, uninstall.php ne touche a rien. Cochee, il efface les reglages, le repere de la copie, la meta _cab_uo_primary_category de tous les articles, et la case elle-meme. Sur un reseau, il passe de site en site et chacun decide pour ses propres donnees.
Le script de l'ecran suit aussi les options hors carte : la case s'eteint et se rallume sans enregistrer, comme les autres.
Essaye en local, ecran en francais, case decochee au premier affichage, et sur cabrio-test avec WP-CLI : reglages, repere et meta poses, puis desinstallation case decochee, tout reste ; case cochee, la desactivation garde tout, la desinstallation efface les quatre. cabrio-test remis dans son etat d'avant.
1.26.0
La categorie principale de SEOPress est recopiee, et survit a son depart.
Demande de Cyrille : "il faudrait que mon plugin recupere les configurations des categories principales de SEOPress si on le supprime un jour, et que ca ne casse pas le site".
La 1.25.0 lisait ce que SEOPress laisse en base apres son depart. Ce n'etait pas assez : SEOPress efface toutes ses metas _seopress_% a la desinstallation des que la constante SEOPRESS_UNINSTALL est posee, par une requete SQL directe, et un nettoyage des metas orphelines, deja pratique sur ce site pour d'autres extensions parties, ferait de meme.
L'EXTENSION TIENT DONC SA PROPRE COPIE, en permanence, dans sa meta _cab_uo_primary_category :
- une fois par version, elle recopie les choix deja faits dans SEOPress, Yoast ou Rank Math. Tant que l'une d'elles est active, c'est elle qui fait foi et sa valeur remplace la copie ; sans elle, la copie est le choix de l'auteur et n'est que completee, jamais ecrasee ;
- ensuite, chaque choix ecrit par l'une d'elles est recopie a l'instant (added_post_meta, updated_post_meta), meme quand l'option est grisee ;
- une SUPPRESSION de leur meta n'est jamais recopiee : c'est ce que font une desinstallation ou un nettoyage, precisement quand la copie doit rester. Seul un choix explicite "aucune", ecrit comme une valeur vide, l'efface.
L'ecran des reglages dit combien d'articles la copie couvre, en deux phrases : "Copie gardee ici" quand une extension de referencement est active, et le nombre de categories principales qui servent quand il n'y en a pas.
Essaye en local. La copie suit un choix, s'efface sur "aucune", et survit a une suppression par l'API comme a la suppression SQL que fait la desinstallation de SEOPress. Le rattrapage complete sans ecraser quand aucune extension n'est active, et laisse SEOPress faire foi quand il l'est. Et sur le site local, l'essai de Cyrille l'a montre pour de vrai : categorie principale "Le reseau CabMiniWorld" choisie dans SEOPress sur "Un premier plan" et "Choix de la menuiserie", recopiee a l'instant, puis SEOPress desactive : leurs adresses restent sous /mes-projets/le-reseau-cabminiworld/ au lieu de retomber sous /le-blog/les-plans/ et /le-blog/la-menuiserie/.
1.25.0
La categorie principale d'un article, quand aucune extension de referencement n'en propose.
Demande de Cyrille le 5 octobre, en relisant la reponse donnee pour le theme cab-miniworld : "sans aucune de ces extensions, WordPress prend la plus ancienne des categories". Un article range dans plusieurs categories n'a pas de principale aux yeux de WordPress, et rien ne pouvait lui dire autre chose.
UN SEUL BRANCHEMENT, LE FILTRE DE L'ADRESSE. get_permalink() range les categories par identifiant et propose la premiere a post_link_category ; c'est la que SEOPress, Yoast et Rank Math repondent, et c'est la que l'extension repond aussi (inc/primary-category.php). L'adresse suit, et tout ce qui pose la meme question : dans cab-miniworld, le fil d'Ariane, le panneau lateral, l'article precedent et le suivant, sans une ligne de plus dans le theme.
Dans l'editeur d'article, une liste "Categorie principale" dans le panneau "Categories", sous "Ajouter une categorie" : la ou SEOPress met la sienne, a la demande de Cyrille, et par le meme passage, le filtre editor.PostTaxonomyType qui enveloppe le panneau d'origine sans y toucher. Elle propose les seules categories cochees, "Automatique" en tete avec le nom auquel il mene, et ne parait qu'a partir de deux categories. Le choix est garde dans la meta _cab_uo_primary_category. Une categorie decochee apres avoir ete choisie ne compte plus.
ELLE SE RETIRE DEVANT LES TROIS. Deux reponses au meme filtre se deferaient l'une l'autre, la derniere gagnant sans prevenir. Quand SEOPress, Yoast ou Rank Math est actif, l'option est grisee et inactive dans les reglages, avec la raison ecrite dessous, et rien n'est branche. Son etat en base est garde : elle revient telle quelle si l'extension s'en va. Le filtre cab_uo_primary_category_providers en ajoute d'autres.
LE CHOIX FAIT AILLEURS N'EST PAS PERDU. Les trois gardent leur categorie principale dans leur propre meta apres leur depart ; tant qu'aucune n'est choisie ici, c'est elle qui sert, si l'article y est toujours range. Retirer SEOPress ne deplace aucune adresse.
Pour l'ecran des reglages, deux petites choses qui servent toute option : une famille "Contenus", pour ce qui appartient a un article plutot qu'a un bloc, et une option peut etre VERROUILLEE, grisee avec sa raison. Une carte sans bloc ne nomme plus de blocs en pied.
La desinstallation efface aussi la meta des articles, jamais la desactivation.
Corrige au passage : la description de l'extension dans la liste des extensions s'affichait en anglais, sa traduction visait une ancienne version du texte. Et le readme portait 1.24.0 pour une extension en 1.24.1.
Essaye en local dans les deux cas. SEOPress actif : option grisee, carte "Desactivee", raison affichee, aucune liste. Sans extension de referencement : la liste propose "Automatique : Le decor" puis les deux categories ; "Le petit reseau de Noel" choisi et enregistre, l'adresse passe de /le-blog/le-decor/ a /mes-projets/le-petit-reseau-de-noel/, le panneau du theme dit "Dans Mes projets", les voisins viennent du reseau de Noel, et l'ancienne adresse ouvre toujours l'article en designant la nouvelle comme canonique. Le site local a ensuite ete remis tel qu'il etait.
1.24.1
On ne demande la mediatheque que pour le bloc qu'on tient.
Signale par Cyrille : dans l'editeur de sa page d'exemple, le bloc "Derniers articles" restait sur son cercle tournant. Mesure, et la cause etait de moi.
LA 1.24.0 INTERROGEAIT LA MEDIATHEQUE POUR CHAQUE BLOC IMAGE DE LA PAGE, au montage, alors que les deux groupes ne se dessinent que dans l'inspecteur – et le coeur ne monte l'inspecteur que pour le bloc SELECTIONNE. Trente photographies faisaient donc trente requetes, dont vingt-neuf que personne n'allait lire.
CE QUI LE RENDAIT VISIBLE AILLEURS : un navigateur n'ouvre que six connexions a la fois vers un meme hote. Les autres appels de l'editeur passaient derriere les notres et attendaient leur tour. Mesure sur la page d'exemple, 186 blocs :
- module actif : 48 requetes REST, ~30 fiches de media, la plus longue a 50 s, et /wp/v2/posts rendu en 24 et 37 secondes ;
- module coupe : 11 requetes REST, aucune fiche de media, et /wp/v2/posts rendu en 9 et 18 secondes.
L'identifiant du media vaut desormais zero tant que le bloc n'est pas selectionne, et c'est tout le remede : getEntityRecord comme apiFetch partent de cette valeur, donc un zero ne demande rien.
PAS DE CACHE, ET C'EST VOULU. Garder la reponse d'une fois sur l'autre economiserait une requete par selection, mais ces deux boutons existent precisement pour relire la mediatheque APRES l'avoir modifiee : un cache rendrait l'ancienne legende, c'est-a-dire l'inverse de ce qu'on vient chercher.
ET LES DEUX GROUPES ONT CHANGE D'ONGLET. Trouve en verifiant le correctif ci-dessus : ils ne paraissaient plus du tout. WordPress 7.1 a coupe l'inspecteur en trois onglets – Contenu, Reglages, Styles – et il a emmene le champ "Texte alternatif" dans le premier, qui est celui qui s'ouvre. Nos deux groupes parlaient de l'alt et de la legende depuis "Reglages", c'est-a-dire sous un onglet que personne n'ouvre pour cela.
Ce n'etait pas notre module : un remplissage d'essai tout nu ne sortait pas davantage. Mesure des neuf noms de groupe sur cette version : content va dans Contenu, settings dans Reglages, et typography, color, dimensions, border et styles dans Styles.
LE NOM SE DECIDE EN PHP, et pas dans le navigateur. Un group qu'une version ne connait pas ne rend RIEN, sans erreur ni avertissement – le module disparaitrait en silence sur un WordPress plus ancien, et cette extension en accepte depuis la 6.7. La borne est celle qui a ete mesuree, 7.1 ; en deca, le groupe reste celui d'avant, qui y fonctionne.
Le message d'absence rejoint l'onglet des groupes, dont il sortait. Il en sortait parce qu'un media qui ne se resout pas laisse le coeur sans un seul panneau a monter, et que l'onglet serait reste vide ; mesure sur un onglet "Contenu" ou rien d'autre n'etait pose, UN SEUL REMPLISSAGE SUFFIT A LE FAIRE EXISTER.
Mesure apres coup, image seule et image dans une galerie : onglet Contenu ouvert, les deux groupes avec leurs valeurs, et les deux boutons desarmes puisque le bloc dit deja la meme chose.
1.24.0
Reprendre les mots de la mediatheque, sur le bloc Image.
LE COEUR LES RECOPIE UNE FOIS, ET UNE SEULE. A l'insertion d'une image, il prend le texte alternatif et la legende de la mediatheque et les ecrit dans le bloc ; apres quoi ce sont des attributs, et plus rien ne relit la bibliotheque. Les y ecrire APRES coup ne change donc rien a ce qui est deja pose – et c'est le cas de la plupart des photographies d'un site qui vit.
Et le bouton de la barre d'outils n'y change rien : "Ajouter une legende" bascule un etat local, showCaption dans utils/caption.mjs du coeur, et n'ecrit dans les attributs qu'en s'eteignant, pour les vider. Le champ s'ouvre vide.
D'OU CES DEUX BOUTONS. Ils ne font rien d'eux-memes : ils montrent ce que la mediatheque dit et laissent le reprendre d'un clic. Ce qu'ils ecrivent est du contenu ordinaire, qu'on modifie, qu'on garde ou qu'on vide.
SUR LE BLOC IMAGE, DONC PARTOUT. Une galerie est une suite de blocs Image depuis WordPress 5.9 : les poser sur l'image seule les donne aussi a chacune des images d'une galerie. "Je pense que le mettre sur les images simples est la meilleure solution, vu qu'on les retrouvera egalement dans les galeries", dit Cyrille le 29 septembre. Une version anterieure, dans le theme, s'abstenait justement dans les galeries, au motif que la galerie parlait pour les siennes ; mais une legende est une affaire d'image, pas de lot.
CE MODULE VIENT DU THEME cab-miniworld, ou il vivait depuis sa 2.84.0. C'est un comportement, pas une robe : il n'a rien a faire dans un theme, et il ne doit pas disparaitre le jour ou l'on en change. Le theme 3.63.0 le retire.
ON DEMANDE LA FICHE A WORDPRESS, ET NON AU MAGASIN, et il a fallu trois ecritures pour y venir. hasFinishedResolution dit qu'une recherche ne tourne plus, pas qu'elle a rapporte quelque chose : des images presentes etaient declarees disparues. hasResolutionFailed semblait repondre a la vraie question, mais UN ECHEC RESTE INSCRIT – une requete ratee au chargement, et l'editeur en lance des dizaines d'un coup sur une page de vingt-deux photographies, laisse le media marque perdu pour toute la session. Une requete par media, donc, et ce qu'elle rend fait foi.
Quatre lignes de style partent avec le module, et c'est assume : rien de cela ne va sur une page, c'est l'ecran de l'editeur, et un groupe sans air y serait colle au filet qui le separe des reglages du coeur.
Mesure en local, sur une image DANS une galerie : les deux groupes paraissent avec leurs valeurs, le bouton de l'alt desarme parce que le bloc dit deja la meme chose, celui de la legende actif. Nouvelle carte "Bloc Image" dans l'ecran des reglages, option cochee.
1.23.1
La maconnerie ne touche plus a la legende non plus.
Meme faute que celle corrigee a la 1.23.0, a un autre endroit : la feuille de la maconnerie faisait redescendre la legende sous l'image, sans fond ni couleur, au motif qu'un voile suppose une vignette de hauteur connue. C'etait poser une forme que personne n'avait demandee.
Cyrille a bascule le site local sur Twenty Twenty-Five pour verifier, et l'a vu : une galerie en maconnerie montrait sa legende SOUS l'image quand les deux autres la montraient DESSUS, sur le degrade du coeur.
La legende reste donc ce que le coeur en fait, ici comme ailleurs. Ce style ne regle plus que la disposition : combien de colonnes, et des figures qui gardent leurs proportions.
Mesure sur Twenty Twenty-Five, page d'exemple, les trois formes de galerie : position absolue, degrade, encre blanche, 13 px de garniture. Identiques.
1.23.0
Les legendes de galerie rendues au theme : une extension ne pose pas de forme.
La 1.22.0 deplacait la legende des galeries de SUR l'image vers SOUS l'image, pour tout site qui installe l'extension. C'etait une mise en page, donc une affaire de theme, et cela contredisait la regle que Cyrille pose depuis le debut : le plugin ne touche pas au design.
C'EST LUI QUI L'A REPERE, en revoyant son thème : "a-t-on bien fait de modifier le systeme du coeur dans le plugin qui affichait la legende en blanc sur l'image dans les galeries ? ce qui fausse ma demande de depart". Il avait raison.
LE SYMPTOME QUI TRAHISSAIT LA FAUTE : le theme devait LUTTER contre l'extension. La regle du voile de cab-miniworld pesait (1,3,1) uniquement pour reprendre la main sur celle du plugin en (0,5,1). Deux paquets qui se disputent la meme propriete, c'est que la responsabilite est mal placee – pas qu'il faut ajouter du poids.
CE QU'IL FALLAIT ENTENDRE DERRIERE LA DEMANDE D'ORIGINE. Elle disait "qu'une regle ecrite une fois cote theme vale partout", pas "impose cette apparence". Et le coeur visait deja juste : elements.caption de theme.json nomme .wp-block-gallery figcaption, il perdait seulement en poids. Le besoin reel etait que le theme PUISSE reprendre la main.
Partent donc : l'option, inc/gallery-captions.php et assets/css/gallery-captions.css. Les galeries retrouvent ce que le coeur en fait, et chaque theme decide. Le catalogue est refait : quatre phrases devenues inutiles s'en vont.
Mesure sur le local : le module est parti, la feuille ne part plus, et le voile au survol de cab-miniworld fonctionne toujours – position absolue, retrait de 2 px, rayon de 13 px, cache au repos.
1.22.0
Une legende de galerie redevient une legende d'image.
Cyrille, sur sa page d'exemple : les legendes n'ont pas le meme design que celles des images simples, et si c'est le theme qui gere ces choses, elles devraient toutes avoir le meme style, pour qu'une regle ecrite une fois se repercute partout. Puis, deux messages plus loin, le raisonnement entier : "les galeries sont bien plusieurs images simples ensemble non". Oui, depuis WordPress 5.9 : le bloc Galerie n'a plus de balisage a lui, il imbrique des blocs Image, et chaque figure porte wp-block-image.
CE QUE LE COEUR FAIT. Il donne a la legende d'une image un poids NUL, .wp-block-image :where(figcaption), deux declarations de marge. Puis il ecrase tout, pour les galeries seulement, avec un selecteur qui pese (0,4,1) : la legende part en absolu au bas de la vignette, en blanc, centree, sur un degrade noir, a 13 px, avec une ombre portee et un voile flou en ::before.
LE THEME VISAIT DEJA JUSTE, et personne ne l'ecoutait. La regle que theme.json engendre pour elements.caption nomme .wp-block-gallery figcaption dans sa liste. Seulement elle s'ecrit :root :where(…), soit (0,1,0), et perdait contre le coeur sans que rien ne le dise.
D'OU LE PARTAGE : la feuille defait la mise en page, et le module PHP relit elements.caption par wp_get_global_styles() pour le reemettre avec assez de poids. Aucune valeur n'est inventee : les marges sont celles que le coeur donne a l'image simple, la typographie est celle du theme, l'encre est heritee comme elle l'est sur une image simple. C'est le procede de heading-level.php a la lettre, et le jour ou le theme change d'avis, ceci change avec lui. Sur un theme sans theme.json il n'y a rien a copier, aucune regle de typographie n'est ecrite, et la legende herite.
IL A FALLU ATTENDRE LE BON MOMENT. wp_enqueue_block_style() n'enregistre pas le style tout de suite, il pose un rendez-vous sur enqueue_block_assets : une regle ajoutee des init s'adressait a un identifiant qui n'existait pas encore et partait en silence. La feuille etait la, la ligne de typographie non, et la legende gardait ses 13 px.
Mesure sur la page d'exemple, sous Twenty Twenty-Five, dix proprietes comparees entre une image simple et une image de galerie – position, taille, interligne, encre, fond, degrade, alignement, garniture, marges, ombre, plus le voile en ::before : AUCUN ECART.
1.21.0
Une galerie en maconnerie, qui ne depend plus d'un theme.
Cyrille a fait l'essai : passe le site local sur Twenty Twenty-Five, la maconnerie avait disparu, puisqu'elle vivait dans cab-miniworld. Une galerie de photographies aux hauteurs libres n'est pas une mode de theme, c'est une forme qu'on choisit par galerie, et elle ne doit pas s'en aller le jour ou l'on change de robe. Meme raison qui a fait sortir la grille depliante une semaine plus tot.
LE NOMBRE DE COLONNES SUIT LE CONTENEUR, ET C'EST LE PROGRES. columns accepte un nombre ET une largeur, et le navigateur retient le plus petit des deux : au plus ce que la galerie demande, au moins 14 rem par colonne. Une galerie reglee sur cinq colonnes en fait cinq en pleine page, trois dans un onglet, deux dans une colonne, une sur un telephone, sans une seule requete de media. La version que le theme portait ecrivait ses paliers en largeur de FENETRE : posee dans une colonne etroite, elle gardait ses trois colonnes et ecrasait ses photographies.
LA VRAIE MACONNERIE DU CSS N'EXISTE PAS ENCORE. Mesure le 28 septembre 2026 sur Chrome 152 : grid-template-rows: masonry, display: masonry et item-pack sont refuses tous les trois, et la specification hesite encore entre ces syntaxes. Ecrire ici une regle pour l'une d'elles serait ecrire du code que personne ne peut essayer et qui se reveillerait un jour sans qu'on l'ait voulu. Le jour venu, un @supports suffira.
L'ORDRE EST LE PRIX, et il faut le dire : les colonnes du CSS se remplissent vers le bas, la deuxieme photographie se place SOUS la premiere et non a cote. Sur une page d'images, ou l'on regarde plutot qu'on ne lit, l'echange vaut de n'avoir aucun JavaScript, et c'est ce que faisaient deja les maconneries a bibliotheque, qui posaient chaque vignette dans la colonne la plus courte.
La forme n'est PAS le defaut, a dessein. Un theme pouvait en faire son aspect ordinaire, il connaissait ses pages ; une extension ne change pas l'allure de toutes les galeries d'un site qui ne lui a rien demande. On coche la forme sur la galerie qu'on veut.
Le style s'appelle cab-uo-masonry et non cab-masonry, parce que cab-miniworld en declare encore un de ce nom : deux styles de meme nom sur le meme bloc, c'est l'un qui mange l'autre sans rien dire. Les pages en ligne passeront d'un nom a l'autre, puis celui du theme s'en ira.
La feuille part par wp_enqueue_block_style, donc seulement la ou une galerie existe, et dans le canevas de l'editeur aussi. Mesure sur le local sous Twenty Twenty-Five : WordPress l'a servie EN LIGNE, pas une requete de plus ; galerie de 645 px, deux colonnes de 224 px minimum, hauteurs de 234, 235 et 443 px.
1.20.2
Le compte sort des parentheses et prend une classe.
La 1.20.1 l'ecrivait "Decor (11)". Cyrille : "je prefere comme avant, mais c'est peut-etre dans le theme ca non ? peut-etre enlever les parentheses dans le plugin pour faciliter la modif dans les themes." Les deux moities de la phrase sont justes, et la reponse va un cran plus loin que des parentheses en moins.
LE COMPTE PART DANS UNE BALISE : span class="cab-uo-tab-count". Le theme en fait ce qu'il veut, une pastille ronde, une couleur, ou rien. Sans theme qui la connaisse, l'onglet se lit "Decor 11" et ne gene personne. C'est le meme contrat que cab-uo-level-3 : le plugin nomme, le theme habille.
OU ECRIRE CETTE BALISE, il a fallu le mesurer. core/tab-list tient bien la liste des boutons, et son label est du rich-text, donc une balise en ligne y tiendrait. Mais l'editeur REFAIT cette liste depuis les panneaux : les balises ecrites la etaient effacees a la premiere synchronisation, mesure sur la page d'essai. C'est donc le label de core/tab-panel qui les porte, et il les laisse passer telles quelles jusqu'au bouton, dans l'editeur comme sur la page.
L'ACCESSIBILITE NE CHANGE PAS. Le panneau ne lit pas ce libelle comme un texte brut : il s'annonce par aria-labelledby vers son bouton. Le nom annonce reste "Decor 11", ce qu'il faut.
Mesure sur le local : huit boutons, chacun avec son span, dans l'editeur, dans le contenu enregistre et sur la page servie.
1.20.1
Trois defauts que Cyrille a trouves en regardant l'ecran.
Mes essais de la 1.20.0 lisaient l'arbre des blocs et le declaraient bon. Les siens regardaient la page, et ont vu trois choses fausses. La lecon est la meme a chaque fois : une structure juste ne prouve pas un ecran juste.
LA GRILLE DEPLIANTE NE SE REPLIAIT PAS DANS UN ONGLET. Le nombre d'images par rangee se lit dans la largeur de la galerie et de sa premiere figure. Dans un panneau d'onglets qui n'est pas celui du dessus, les deux valent zero : le calcul se rabattait sur "tout tient sur une rangee", donc une seule rangee, donc rien a replier et un bouton cache. Onze photographies sortaient d'un coup, la onzieme etiree sur toute la largeur faute de voisines.
Un ResizeObserver previent maintenant des que la galerie prend une largeur, c'est-a-dire des que son onglet s'ouvre, et le decoupage se refait. Ni load ni resize ne disaient rien de cela : aucun des deux ne se produit quand on passe d'un onglet a l'autre. Mesure en 1500 px : sur "Divers (11)", 10 images sur 11 et un bouton Voir plus ; Voir plus en montre 11, Voir moins ramene a 10.
"PROPOSER UN ONGLET TOUS" RESTAIT VIF SANS FILTRE. Il ne commande rien tant qu'il n'y a pas d'onglets a garnir. Il se voit desarme, avec un mot qui dit d'allumer le filtre d'abord.
LE NOMBRE D'IMAGES EST REVENU DANS LE NOM DE L'ONGLET. Il y etait du temps de la barre maison, je l'ai perdu en passant au bloc du coeur, et personne ne l'avait demande. Les onglets s'appellent de nouveau "Tous (34)", "Decor (1)", "Divers (11)".
Reste un point, signale et non corrige parce qu'il regarde la forme, donc le theme : depliee, une derniere rangee qui n'a qu'une image l'etire sur toute la largeur. C'est le bloc Galerie du coeur qui fait cela, sur n'importe quelle page ; le filtre le rend seulement plus frequent, en decoupant la galerie en lots dont le compte tombe mal.
1.20.0
La galerie reste dans l'editeur, et le site n'affiche que les onglets.
La 1.19.0 laissait la galerie entiere au-dessus des onglets, visible sur le site. Un jet suivant l'a dissoute dedans, et Cyrille s'est retrouve devant une page sans galerie, donc sans interrupteur, donc sans retour possible : "plus de galerie donc je ne peux plus revenir en arriere". C'etait sans issue, et ma faute.
SA REPONSE EST CELLE QUI EST EN PLACE : "il suffit de cacher la galerie en front-end, et d'afficher uniquement l'onglet, avec 'tous' ou non… mais dans l'edition on garde la galerie". Le partage se lit en trois lignes :
- la galerie ne bouge pas. Elle reste le bloc qu'on prend en main, avec son ordre, ses reglages et son glisser-deposer, et c'est d'elle que les onglets sont faits ;
- les onglets se posent juste apres elle, un par dossier de la mediatheque, et ce sont eux que la page montre ;
- la galerie porteuse, elle, n'est plus rendue sur le site. Elle n'est pas cachee par du style : elle n'est pas rendue du tout, donc aucune des photographies ne descend pour rien et rien ne traine pour les lecteurs d'ecran ni pour les moteurs.
L'ONGLET "TOUS" EST REVENU, avec son interrupteur. Il ouvre les onglets sur un premier panneau qui tient la galerie entiere ; sans lui, les photographies ne vivent que dans leurs dossiers. Il se change quand on veut, et changer repose les onglets : la galerie etant restee, cela ne coute rien.
CE QUE CELA NE FAIT PAS, et Cyrille a eu raison de le demander : les onglets sont du contenu une fois poses. Ranger plus tard une photographie dans un dossier ne les remplit pas toute seule. Eteindre et rallumer les refait, sans rien perdre puisque la source est la.
UNE SORTIE POUR LES PAGES DEJA ABIMEES. Une galerie prise dans des onglets poses par le jet precedent garde un interrupteur : l'eteindre refond les onglets en une seule galerie, avec toutes les photographies de tous les onglets, une fois chacune – celle qui est rangee dans deux dossiers parait dans deux onglets et ne doit pas revenir en double.
Le reglage general d'administration ne commande pas le masquage, a dessein : il ouvre ou ferme le panneau dans l'editeur, tandis que la page porte son choix dans son propre balisage. Le lier ferait reparaitre toutes les galeries sous leurs onglets le jour ou on eteindrait le module, et une case d'administration n'a pas a defaire des pages.
Le catalogue de traduction a ete refait depuis les sources : il gardait encore seize phrases de versions mortes, et il lui manquait les trois nouvelles.
1.19.0
The switch is back, and it does the work itself.
1.18.0 asked for two gestures: tick a box in the plugin's settings, then press a button on each gallery. Cyrille asked for one. Filter by folder is a switch on the gallery again, and switching it on lays the Tabs block under the gallery there and then. Switching it off takes it away.
IT ONLY TAKES AWAY WHAT IT LAID. The Tabs block it creates carries a class, cab-uo-from-gallery, and only the block right after the gallery bearing that class is removed. A Tabs block written by hand under a gallery is not touched.
The switch is greyed out, with a word saying why, when the gallery's pictures are all in one folder or in none: there would be nothing to sort.
Measured both ways: switched on, the gallery keeps its 34 pictures and a Tabs block appears right after it, in the same parent, with seven panels holding 1, 11, 5, 3, 6, 7 and 7 pictures. Switched off, the Tabs block is gone and the gallery still holds its 34.
1.18.0
The filter IS the tabs. Our own bar is gone.
Cyrille, at the end of his patience and right to be: the filtered gallery does not appear IN TABS. He had said it three times. This version does only that.
WHAT GOES: the bar this plugin drew above the gallery, its script, its stylesheet, its preview in the canvas, the dimming of the other folders, the dressing chosen for its buttons, and the two settings that governed it. Nothing of this plugin reaches a page any more; a page not opened in the editor does not know it exists.
WHAT REMAINS: one button, Split into tabs by folder. THE GALLERY STAYS, whole, with every picture in it, and a core Tabs block is added right after it: one tab per folder, named after it, holding the pictures filed in that folder. Cyrille drew the tree he expected, and that is it — the overall view kept, the folder views gained. After that WordPress does everything, and does it better than four days of my own bar ever did: the theme's dressing, the keyboard, the accessibility, and the heading level the editor lets you set.
WHAT TO DO AFTER DEPLOYING: the one page that used the old bar now shows a plain gallery. Open it, select the gallery, press the button once. Nothing is lost in the meantime: every picture is there, in order.
Measured: no bar left on the page and none in the canvas, one Tabs block with seven panels named Decor, Divers, Entreprises, Immeubles, Lotissement, Villas and Voies ferrees, holding 1, 11, 5, 3, 6, 7 and 7 pictures, and the core's own settings in the sidebar.
The See more button of the unfolding grid keeps the theme's button classes, and no choice of its own: that is what a theme is for.