{"id":231235,"date":"2022-12-18T13:48:00","date_gmt":"2022-12-18T10:48:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231235"},"modified":"2022-12-18T13:49:28","modified_gmt":"2022-12-18T10:49:28","slug":"widgets-wordpress-refactorisation-partie-6","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/widgets-wordpress-refactorisation-partie-6\/","title":{"rendered":"Widgets WordPress : refactorisation, partie 6"},"content":{"rendered":"\n<p>Vous devriez bien conna\u00eetre la refactorisation que nous effectuons concernant le WordPress Widget Boilerplate. Sinon, je vous recommande de rattraper la s\u00e9rie jusqu&rsquo;\u00e0 pr\u00e9sent en\u00a0:<\/p>\n<ul>\n<li>en lisant <a href=\"https:\/\/tommcfarlin.com\/wordpress-widgets-part-5\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le message pr\u00e9c\u00e9dent<\/a> ,<\/li>\n<li>ou lire <a href=\"https:\/\/tommcfarlin.com\/tag\/wordpress-widgets-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">toute la s\u00e9rie<\/a> jusqu&rsquo;\u00e0 ce point,<\/li>\n<li>et en regardant <a href=\"https:\/\/github.com\/tommcfarlin\/WordPress-Widget-Boilerplate\/tree\/develop\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la branche de d\u00e9veloppement du projet<\/a> sur GitHub.<\/li>\n<\/ul>\n<p>En ce qui concerne la base de code, nous sommes actuellement bien plac\u00e9s. Nous avons commenc\u00e9 \u00e0 refactoriser une grande partie du code en classes plus petites et plus cibl\u00e9es. Et nous venons de mettre en place un registre afin que nous puissions commencer \u00e0 travailler avec des instances d&rsquo;objets tout au long du plugin sans avoir besoin de trop de couplage.<\/p>\n<p>Mais il y a toujours un probl\u00e8me auquel nous sommes confront\u00e9s et qui concerne les espaces de noms et le chargement automatique. J&rsquo;en ai un peu parl\u00e9 il <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/espaces-de-noms-et-chargement-automatique-dans-wordpress\/\" title=\"y a quelques ann\u00e9es,\">y a quelques ann\u00e9es,<\/a> mais pas en ce qui concerne Composer.<\/p>\n<p>Et c&rsquo;est ce que nous allons voir dans cet article.<\/p>\n<h2>Le passe-partout du widget WordPress\u00a0: refactorisation, partie 6<\/h2>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/fr\/widgets-wordpress-refactorisation-partie-2\/\" title=\"Dans le deuxi\u00e8me article de cette s\u00e9rie\">Dans le deuxi\u00e8me article de cette s\u00e9rie<\/a>, nous avons commenc\u00e9 \u00e0 parler de Composer. Si vous demandez \u00e0 la plupart des d\u00e9veloppeurs PHP (y compris ceux qui travaillent sur WordPress), vous entendrez probablement que Composer est un gestionnaire de packages ou un gestionnaire de d\u00e9pendances.<\/p>\n<p>En bref, c&rsquo;est un moyen pour nous d&rsquo;int\u00e9grer des biblioth\u00e8ques tierces dans notre projet, puis d&rsquo;utiliser leurs fonctionnalit\u00e9s (nous n&rsquo;avons donc pas \u00e0 \u00e9crire notre propre code pour le faire).<\/p>\n<p>Mais il existe une autre fonctionnalit\u00e9 offerte par Composer qui est d&rsquo;une immense utilit\u00e9, en particulier lorsque vous utilisez de nombreuses classes et <strong>que vous ne<\/strong> souhaitez pas utiliser d&rsquo;instructions require_once dans votre base de code.<\/p>\n<p>Et c&rsquo;est le chargeur automatique.<\/p>\n<h3>L&rsquo;autochargeur d\u00e9fini<\/h3>\n<p>Directement du <a href=\"https:\/\/getcomposer.org\/doc\/01-basic-usage.md#autoloading\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">manuel:<\/a><\/p>\n<blockquote>\n<p>Pour les biblioth\u00e8ques qui sp\u00e9cifient des informations de chargement automatique, Composer g\u00e9n\u00e8re un <code>vendor\/autoload.php<\/code>fichier. Vous pouvez simplement inclure ce fichier et commencer \u00e0 utiliser les classes fournies par ces biblioth\u00e8ques sans aucun travail suppl\u00e9mentaire\u00a0:<\/p>\n<\/blockquote>\n<p>Si vous avez suivi le code jusqu&rsquo;\u00e0 pr\u00e9sent, vous verrez que nous utilisons d\u00e9j\u00e0 le chargeur automatique g\u00e9n\u00e9r\u00e9 par Composer.<\/p>\n<p>Dans un premier temps, nous avons d\u00e9fini <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94d1c4d9f22431f12102051cff4300ab#file-00-composer-json\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la configuration n\u00e9cessaire<\/a> :<\/p>\n<pre><code>{\n    \"name\": \"wordpress-widget-boilerplate\/wordpress-widget-boilerplate\",\n    \"description\": \"An organized, maintainable boilerplate for building widgets using WordPress best practices.\",\n    \"type\": \"wordpress-plugin\",\n    \"license\": \"GPL-3.0-or-later\",\n    \"homepage\": \"https:\/\/github.com\/tommcfarlin\/WordPress-Widget-Boilerplate\",\n    \"authors\": [\n      {\n        \"name\": \"Tom McFarlin\",\n        \"email\": \"tom@pressware.co\",\n        \"homepage\": \"https:\/\/pressware.co\"\n      }\n    ],\n    \"support\": {\n      \"issues\": \"https:\/\/github.com\/tommcfarlin\/WordPress-Widget-Boilerplate\/issues\"\n    },\n    \"config\": {\n      \"preferred-install\": \"dist\",\n      \"platform\": {\n          \"php\": \"7.1\"\n      }\n    },\n    \"repositories\": [\n      {\n        \"type\": \"composer\",\n        \"url\": \"https:\/\/wpackagist.org\"\n      }\n    ],\n    \"require\": {\n      \"php\": \"7.1\",\n      \"composer\/installers\": \"^1.4\"\n    },\n    \"require-dev\": {\n        \"friendsofphp\/php-cs-fixer\": \"^2.13.1\",\n        \"jakub-onderka\/php-parallel-lint\": \"^1.0.0\",\n        \"phpmd\/phpmd\": \"^v2.6.0\",\n        \"nikic\/php-parser\": \"^4.0\",\n        \"ocramius\/proxy-manager\": \"^2.0.0\",\n        \"phpro\/grumphp\": \"^0.13.1\"\n    },\n    \"scripts\": {\n      \"test\": [\n        \".\/vendor\/bin\/grumphp run\"\n      ]\n    },\n    \"minimum-stability\": \"stable\"\n  }<\/code><\/pre>\n<p>Ensuite, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94d1c4d9f22431f12102051cff4300ab#file-01-plugin-boostrap-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nous avons commenc\u00e9 \u00e0 l&rsquo;inclure dans le bootstrap du plugin<\/a> (que nous finaliserons aujourd&rsquo;hui) :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Include the autoloader.\n\/\/ TODO: Note this has not yet been defined.\nrequire_once __DIR__. '\/inc\/autoload.php';\n<\/code><\/pre>\n<p>Mais il y a un probl\u00e8me ici: comment charger uniquement les classes dont nous avons besoin pour la distribution ?<\/p>\n<p>En d&rsquo;autres termes\u00a0: il existe de nombreuses biblioth\u00e8ques que nous utilisons dans le d\u00e9veloppement pour nous assurer que nous \u00e9crivons du code de haute qualit\u00e9 et conforme aux normes. Mais nous ne voulons pas distribuer 10 Mo de donn\u00e9es \u00e0 ceux qui utilisent notre projet.<\/p>\n<p>Au lieu de cela, nous devons inclure uniquement les fichiers requis, n&rsquo;est-ce pas\u00a0? Et pour ce faire, nous devons nous assurer que nous g\u00e9n\u00e9rons un chargeur automatique que nous pouvons inclure et qui fait exactement cela.<\/p>\n<p>Tout d&rsquo;abord, je vais vous montrer <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94d1c4d9f22431f12102051cff4300ab#file-02-composer-distribution-command-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la commande<\/a>, puis vous expliquer ce qu&rsquo;elle fait\u00a0:<\/p>\n<pre><code>$ composer install --no-dev --no-ansi --no-interaction --optimize-autoloader --no-progress --prefer-dist<\/code><\/pre>\n<p>Cela g\u00e9n\u00e9rera exactement ce dont nous avons besoin pour que notre projet fonctionne dans un environnement de production. Voici ce que fait chaque drapeau\u00a0:<\/p>\n<ul>\n<li><strong>installation du compositeur<\/strong>. Cela installe simplement toutes les d\u00e9pendances. Si vous en avez d\u00e9j\u00e0 un certain nombre dans votre r\u00e9pertoire de fournisseurs, cela supprimera tous sauf ceux qui sont n\u00e9cessaires.<\/li>\n<li><strong>non-dev<\/strong>. Cela emp\u00eachera Composer d&rsquo;installer les packages dans la section <strong>require-dev<\/strong> de ses fichiers de configuration (\u00e0 savoir, les d\u00e9pendances que nous utilisons avec GrumPHP).<\/li>\n<li><strong>non-ansi.<\/strong> Cela emp\u00eache toute sortie ANSI de se produire. Vous ne vous souciez peut-\u00eatre pas de l&rsquo;ex\u00e9cuter ou non. Si vous optez pour un type de d\u00e9ploiement automatique, utilisez-le\u00a0; sinon, il peut \u00eatre omis de la commande.<\/li>\n<li><strong>pas d&rsquo;interaction<\/strong>. Il s&rsquo;agit d&rsquo;un autre indicateur utilis\u00e9 sp\u00e9cifiquement pour les environnements dans lesquels vous souhaitez cr\u00e9er automatiquement le projet et ne pas avoir \u00e0 r\u00e9pondre \u00e0 des questions, des r\u00e9sultats et des choses comme \u00e7a.<\/li>\n<li><strong>optimiser-chargeur automatique<\/strong>. En bref, cela g\u00e9n\u00e8re un chargeur automatique plus rapide. Cela peut prendre un peu de temps en fonction de la taille de votre projet, mais cela porte ses fruits lors du lancement de votre travail.<\/li>\n<li><strong>pas de progr\u00e8s<\/strong>. Cela emp\u00eache la barre de progression de s&rsquo;afficher dans le terminal. Vous voudrez peut-\u00eatre voir cela et, si c&rsquo;est le cas, c&rsquo;est tr\u00e8s bien\u00a0; cependant, certains environnements peuvent ne pas bien g\u00e9rer certains caract\u00e8res (tels que le retour arri\u00e8re).<\/li>\n<li><strong>pr\u00e9f\u00e9rence-dist<\/strong>. Cela garantira que les packages install\u00e9s le sont en utilisant la version de distribution (par opposition \u00e0 quelque chose de moins stable).<\/li>\n<\/ul>\n<h4>Toujours int\u00e9ress\u00e9?<\/h4>\n<p>Si vous \u00eates vraiment curieux d&rsquo;optimiser le chargeur automatique pour des projets en dehors de ce post, je vous recommande de lire <a href=\"https:\/\/getcomposer.org\/doc\/articles\/autoloader-optimization.md\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cette page<\/a> dans la documentation de Composer. Cela sort du cadre de ce que nous faisons ici, mais cela peut \u00eatre utile avec d&rsquo;autres travaux que vous avez actuellement ou que vous ferez \u00e0 l&rsquo;avenir.<\/p>\n<h2>\u00c0 quoi cela ressemble-t-il dans le Boilerplate\u00a0?<\/h2>\n<p>Si vous travaillez sur le Boilerplate sur votre ordinateur local, vous pouvez voir quelque chose comme ceci\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161015-61e719e23bf2d.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161015-61e719e23bf2d.png\" alt=\"Widgets WordPress : refactorisation, partie 6\"><\/a><\/p>\n<p>Mais si vous ex\u00e9cutez la commande incluse ci-dessus, vous verrez alors quelque chose comme ceci\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161015-61e719e5afd5a.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161015-61e719e5afd5a.png\" alt=\"Widgets WordPress : refactorisation, partie 6\"><\/a><\/p>\n<p>C&rsquo;est une grande diff\u00e9rence et c&rsquo;est un petit projet. Imaginez faire quelque chose de beaucoup plus grand qui va fonctionner en production.<\/p>\n<p>Par exp\u00e9rience, je peux vous dire que les projets peuvent rapidement atteindre 20 Mo ou plus de d\u00e9pendances si vous utilisez une vari\u00e9t\u00e9 de biblioth\u00e8ques tierces pour des choses telles que la journalisation, les requ\u00eates HTTP et les outils de qualit\u00e9 du code.<\/p>\n<h2>Allons-nous inclure dans notre r\u00e9pertoire de fournisseurs\u00a0?<\/h2>\n<p>Les gens diront souvent que vous ne devriez pas inclure le r\u00e9pertoire du fournisseur dans le contr\u00f4le de source et pour une bonne raison\u00a0: cela peut \u00eatre \u00e9norme.<\/p>\n<p>M\u00eame la documentation de Composer en <a href=\"https:\/\/getcomposer.org\/doc\/faqs\/should-i-commit-the-dependencies-in-my-vendor-directory.md\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">parle :<\/a><\/p>\n<blockquote>\n<p>La meilleure pratique consiste \u00e0 demander \u00e0 tous les d\u00e9veloppeurs d&rsquo;utiliser Composer pour installer les d\u00e9pendances. De m\u00eame, le serveur de build, CI, les outils de d\u00e9ploiement, etc. doivent \u00eatre adapt\u00e9s pour ex\u00e9cuter Composer dans le cadre de l&rsquo;amor\u00e7age de leur projet.<\/p>\n<\/blockquote>\n<p>Alors qu&rsquo;est-ce qu&rsquo;on est cens\u00e9 faire? Nous avons besoin du chargeur automatique et nous avons besoin de certaines d\u00e9pendances car nos utilisateurs ne sauront pas ex\u00e9cuter (et ne devraient pas non plus ex\u00e9cuter\u00a0!) Composer chaque fois qu&rsquo;ils t\u00e9l\u00e9chargent notre travail.<\/p>\n<p>En raison de la nature de WordPress et du travail que nous effectuons, nous devrons valider le r\u00e9pertoire des fournisseurs, mais uniquement avec certaines exigences.<\/p>\n<ol>\n<li>Nous allons cr\u00e9er une branche qui sera utilis\u00e9e pour la version (nous l&rsquo;appellerons de mani\u00e8re cr\u00e9ative <strong>release<\/strong> et nous pourrons y fusionner le <strong>d\u00e9veloppement<\/strong> chaque fois que n\u00e9cessaire).<\/li>\n<li>Nous nous assurerons que le r\u00e9pertoire du fournisseur ne fait pas partie du fichier gitignore\u00a0; cependant, nous nous assurerons que les r\u00e9pertoires .git dans le r\u00e9pertoire du fournisseur sont ignor\u00e9s (cela peut encore prendre beaucoup d&rsquo;espace).<\/li>\n<\/ol>\n<p>Faisons donc chaque \u00e9tape et voyons \u00e0 quoi cela ressemble lorsque nous avons termin\u00e9.<\/p>\n<h3>Cr\u00e9ation de la branche de publication<\/h3>\n<p>Pour cr\u00e9er une nouvelle branche depuis le terminal, saisissez <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94d1c4d9f22431f12102051cff4300ab#file-03-create-a-branch-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la commande suivante<\/a>\u00a0:<\/p>\n<pre><code>$ git checkout -b release<\/code><\/pre>\n<p>Cela prendra tout le code sur lequel nous travaillons et cr\u00e9era ensuite une nouvelle branche avec. Puisque ce sera la branche que nous utiliserons pour agir comme ce que nos utilisateurs utiliseront (nous parlerons de <strong>master<\/strong> dans un prochain article).<\/p>\n<p>Tout d&rsquo;abord, examinez votre fichier composer.json et assurez-vous qu&rsquo;il inclut les \u00e9l\u00e9ments suivants\u00a0:<\/p>\n<pre><code>\"autoload\": {\n    \"psr-4\": {\n        \"WordPressWidgetBoilerplate\": \"src\/\",\n        \"WordPressWidgetBoilerplateSubscriber\": \"src\/Subscriber\/\",\n        \"WordPressWidgetBoilerplateUtilities\": \"src\/Utilities\/\",\n        \"WordPressWidgetBoilerplateViews\": \"src\/Views\/\"\n    }\n},<\/code><\/pre>\n<p>Nous devons maintenant nous assurer que nous ex\u00e9cutons la commande Composer ci-dessus pour nous assurer que rien d&rsquo;autre que ce dont nous avons besoin ne se trouve dans le\u00a0 r\u00e9pertoire du <strong>fournisseur<\/strong>.<\/p>\n<pre><code>$ composer install --no-dev --no-ansi --no-interaction --optimize-autoloader --no-progress --prefer-dist<\/code><\/pre>\n<p>Maintenant, nous devons mettre \u00e0 jour gitignore.<\/p>\n<h3>Mettre \u00e0 jour ce que nous ignorons<\/h3>\n<p>Et si vous avez suivi \u00e0 la fois la s\u00e9rie et le message jusqu&rsquo;\u00e0 pr\u00e9sent, alors vous savez que cela ressemblera \u00e0 quelque chose comme \u00e7a (cela peut inclure plus ou moins mais devrait inclure au moins cela).<\/p>\n<p>Pour moi, cela ressemble <a href=\"https:\/\/gist.github.com\/tommcfarlin\/94d1c4d9f22431f12102051cff4300ab#file-05-gitignore-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 ceci<\/a> :<\/p>\n<pre><code>*.DS_Store\n*.log\nwp-config.php\nwp-content\/advanced-cache.php\nwp-content\/backup-db\/\nwp-content\/backups\/\nwp-content\/blogs.dir\/\nwp-content\/cache\/\nwp-content\/upgrade\/\nwp-content\/uploads\/\nwp-content\/mu-plugins\/\nwp-content\/wp-cache-config.php\nwp-content\/plugins\/hello.php\n\n\/.htaccess\n\/license.txt\n\/readme.html\n\/sitemap.xml\n\/sitemap.xml.gz\n\n\/vendor\/**\/.git\n\/vendor\/bin\ncomposer.lock\n<\/code><\/pre>\n<p>Selon que vous utilisez un terminal ou un client, vous verrez qu&rsquo;il y a de nouveaux fichiers \u00e0 valider (\u00e0 partir du r\u00e9pertoire du fournisseur, en particulier). Ajoutez-les donc \u00e0 votre branche.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/94d1c4d9f22431f12102051cff4300ab#file-06-pushing-a-new-branch-txt\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Validez ensuite vos modifications<\/a>. Vous devrez peut-\u00eatre sp\u00e9cifier les \u00e9l\u00e9ments suivants si vous travaillez dans le terminal\u00a0:<\/p>\n<pre><code>$ git push --set-upstream origin release<\/code><\/pre>\n<p>Et avec cela, votre code devrait fonctionner et \u00eatre disponible sur GitHub (ou tout autre service de contr\u00f4le de code source que vous utilisez). Vous pouvez voir ce que j&rsquo;ai de disponible <a href=\"https:\/\/github.com\/tommcfarlin\/WordPress-Widget-Boilerplate\/tree\/release\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ici<\/a>.<\/p>\n<h2>Ajouter des fonctionnalit\u00e9s<\/h2>\n<p>Maintenant que nous avons toutes les pi\u00e8ces n\u00e9cessaires en place, il est temps de commencer \u00e0 utiliser Composer, le chargeur automatique, nos classes abstraites et notre registre pour commencer \u00e0 ajouter des fonctionnalit\u00e9s de base au WordPress Widget Boilerplate afin que nous ayons quelque chose \u00e0 montrer pour notre travail .<\/p>\n<p>Pour ceux qui sont curieux, je pr\u00e9vois pour le moment de garder les branches organis\u00e9es comme telles :<\/p>\n<ul>\n<li><strong>master<\/strong> sera ce qui est disponible pour tous ceux qui souhaitent cr\u00e9er un widget WordPress,<\/li>\n<li><strong>develop<\/strong> est strictement r\u00e9serv\u00e9 aux d\u00e9veloppeurs, y compris ceux qui savent utiliser Composer et les sujets abord\u00e9s dans cet article,<\/li>\n<li><strong>release<\/strong> est ce qui sera utilis\u00e9 pour fournir une d\u00e9monstration de travail.<\/li>\n<\/ul>\n<p>Pour l&rsquo;instant, cependant, passez en revue ce qui est couvert dans cet article et nous le reprendrons dans le prochain article.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nous rencontrons un probl\u00e8me avec les espaces de noms et le chargement automatique et c&rsquo;est ce que nous allons examiner dans cet article.<\/p>\n","protected":false},"author":1,"featured_media":223641,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[717],"tags":[1167],"class_list":["post-231235","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpeur","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231235","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=231235"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231235\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/223641"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231235"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231235"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}