{"id":229795,"date":"2022-11-13T12:31:00","date_gmt":"2022-11-13T09:31:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229795"},"modified":"2022-11-13T12:34:01","modified_gmt":"2022-11-13T09:34:01","slug":"comment-utiliser-les-plugins-wordpress-a-chargement-automatique-psr-4","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/comment-utiliser-les-plugins-wordpress-a-chargement-automatique-psr-4\/","title":{"rendered":"Comment utiliser les plugins WordPress \u00e0 chargement automatique PSR-4"},"content":{"rendered":"\n<p>Supposons que vous travaillez sur un projet pour quelqu&rsquo;un et que vous l&rsquo;avez d\u00e9limit\u00e9, que les t\u00e2ches sont d\u00e9l\u00e9gu\u00e9es, que vous disposez de toutes les biblioth\u00e8ques et outils dont vous avez besoin pour d\u00e9marrer, et que vous avez s\u00e9par\u00e9 ce qui sera le th\u00e8me ou la pr\u00e9sentation, et quelles seront les fonctionnalit\u00e9s ou les plugins.<\/p>\n<p>Mais plut\u00f4t que d&rsquo;avoir une poign\u00e9e de plugins individuels, que se passerait-il s&rsquo;il y avait un package de plugins fonctionnels plus petits ou de micro-plugins ou tout ce que vous voulez les appeler fonctionnant pour alimenter le package\u00a0?<\/p>\n<p>De plus, ceux-ci sont tous construits sur la m\u00eame base mais qui partagent \u00e9galement du code les uns avec les autres et pour rendre les choses plus int\u00e9ressantes, vous choisissez d&rsquo;utiliser un chargeur automatique PSR-4 via <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Composer<\/a> pour vous occuper de tout cela\u00a0?<\/p>\n<h2>Plugins WordPress \u00e0 chargement automatique PSR-4<\/h2>\n<p>Tout d&rsquo;abord, la fa\u00e7on de penser \u00e0 ce que j&rsquo;essaie de dire (car qui sait si je suis clair \ud83d\ude43) est que vous avez votre travail dans le <code>wp-content\/plugins<\/code>r\u00e9pertoire. Et votre plugin r\u00e9side, disons, <code>acme-plugins<\/code>et a des sous-r\u00e9pertoires pour vos micro-plugins.<\/p>\n<p>Nous allons garder cela simple pour cet exemple et dire qu&rsquo;il y a le plugin principal et ensuite un seul micro-plugin. Le r\u00e9pertoire ressemblerait \u00e0 ceci\u00a0;<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-165780-61e788fa5037d.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-165780-61e788fa5037d.png\" alt=\"Comment utiliser les plugins WordPress \u00e0 chargement automatique PSR-4\"><\/a><\/p>\n<p>Maintenant, il y a les fichiers que vous vous attendez \u00e0 voir dans un plugin\u00a0:<\/p>\n<ul>\n<li>LISEZMOI,<\/li>\n<li>LICENCE,<\/li>\n<li>CHANGELOG,<\/li>\n<li>compositeur.json<\/li>\n<li>compositeur.lock<\/li>\n<li>vendeur<\/li>\n<li>le fichier d&rsquo;amor\u00e7age du plugin,<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p>Maintenant, voici le truc\u00a0: si vous utilisez <a href=\"http:\/\/www.php-fig.org\/psr\/psr-2\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le PSR-2<\/a> et que vous allez utiliser un chargeur automatique <a href=\"http:\/\/www.php-fig.org\/psr\/psr-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">PSR-4<\/a>, alors il y a deux choses que vous devez savoir\u00a0:<\/p>\n<ol>\n<li>Les espaces de noms doivent correspondre \u00e0 l&rsquo;organisation de l&rsquo;annuaire. J&rsquo;en ai parl\u00e9 un peu lors de <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/espaces-de-noms-et-chargement-automatique-dans-wordpress\/\" title=\"ma pr\u00e9sentation WordCamp Atlanta 2017\">ma pr\u00e9sentation WordCamp Atlanta 2017<\/a> (en particulier sous organisation virtuelle et logique).<\/li>\n<li>Comment travailler avec <code>composer.json<\/code>pour d\u00e9finir vos chargeurs automatiques. Vous pouvez lire beaucoup \u00e0 ce sujet <a href=\"https:\/\/getcomposer.org\/doc\/01-basic-usage.md#autoloading\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ici<\/a>, mais je donnerai les notes de la falaise dans le reste de cet article.<\/li>\n<\/ol>\n<p>Le probl\u00e8me est donc que le <code>vendor<\/code>r\u00e9pertoire r\u00e9side un niveau au-dessus o\u00f9 certains des fichiers source existent. Ainsi, la m\u00e9thode standard de configuration d&rsquo;un chargeur automatique personnalis\u00e9 dans Composer ne fonctionnera pas.<\/p>\n<p>Par exemple, il est tr\u00e8s typique <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c7703a3b7c27594918f0af7a2a7d5fe4#file-00-composer-autoloader-json\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">de voir ceci<\/a> :<\/p>\n<pre><code>{\n  \"name\": \"pressware\/acme-plugins\",\n  \"description\": \"A demo plugin\",\n  \"autoload\": {\n    \"psr-4\": {\n      \"Acme\": \"src\/\",\n    }\n  },\n  \/\/ ...\n}<\/code><\/pre>\n<p>Mais pour compenser notre travail, nous devons <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c7703a3b7c27594918f0af7a2a7d5fe4#file-01-composer-updated-autoloader-json\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">faire ceci<\/a> :<\/p>\n<pre><code>{\n  \"name\": \"pressware\/acme-plugins\",\n  \"description\": \"A demo plugin\",\n  \"autoload\": {\n    \"psr-4\": {\n      \"Acme\": \"\",\n      \"AcmeMicroPlugin\": \"MicroPlugin\/src\/\"\n    }\n  },\n  \/\/ ...\n}<\/code><\/pre>\n<p>C&rsquo;est un changement simple, mais c&rsquo;est un exemple simple, non\u00a0? Alors, qu&rsquo;en est-il?<\/p>\n<p>Notez que nous avons mis \u00e0 jour certains changements dans l&rsquo;\u00a0 emplacement de <strong>chargement automatique<\/strong>. Concr\u00e8tement, voici ce qui se passe :<\/p>\n<ul>\n<li>Le premier \u00e9l\u00e9ment est l&rsquo;espace de noms de niveau sup\u00e9rieur auquel appartiendront tous les plugins qui appartiendront au <strong>plugin Acme<\/strong>.<\/li>\n<li>La deuxi\u00e8me entr\u00e9e fait r\u00e9f\u00e9rence au <strong>MicroPlugin<\/strong> que vous voyez dans le r\u00e9pertoire ci-dessus. Cela repr\u00e9sente l&rsquo;espace de noms pour ce plugin particulier, et il dit \u00e0 Composer de rechercher les fichiers source \u00e0 charger automatiquement en utilisant le r\u00e9pertoire de propri\u00e9t\u00e9s<\/li>\n<\/ul>\n<p>\u00c0 partir de l\u00e0, vous ajouterez une nouvelle entr\u00e9e pour le chargeur automatique correspondant \u00e0 chaque micro-plugin qui appartiendra au plugin de niveau sup\u00e9rieur.<\/p>\n<h2>Organisation des futurs micro-plugins<\/h2>\n<p>Il existe plusieurs fa\u00e7ons de g\u00e9rer l&rsquo;organisation de votre code afin de pouvoir utiliser un chargeur automatique par d\u00e9faut.<\/p>\n<p>Si vous suivez le mod\u00e8le de micro-plugin (faute d&rsquo;un meilleur terme), cela ne fonctionnera pas et vous devrez donc r\u00e9organiser vos fichiers, ce qui peut \u00eatre p\u00e9nible avec le temps.<\/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>Le chargement automatique des plugins WordPress PSR-4 n&rsquo;est pas difficile, mais que se passe-t-il si vous souhaitez utiliser un plugin compos\u00e9 d&rsquo;une vari\u00e9t\u00e9 de plugins et les charger automatiquement \u00e9galement ?<\/p>\n","protected":false},"author":1,"featured_media":223885,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,811,841,862],"tags":[1167],"class_list":["post-229795","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-plugins-2","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229795","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=229795"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229795\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/223885"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=229795"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=229795"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=229795"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}