{"id":231206,"date":"2022-12-17T09:51:00","date_gmt":"2022-12-17T06:51:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231206"},"modified":"2022-12-07T11:44:04","modified_gmt":"2022-12-07T08:44:04","slug":"widgets-wordpress-refactorisation-partie-5","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/widgets-wordpress-refactorisation-partie-5\/","title":{"rendered":"Widgets WordPress : refactorisation, partie 5"},"content":{"rendered":"\n<p><strong><a href=\"https:\/\/tommcfarlin.com\/wordpress-widgets-part-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Dans le post pr\u00e9c\u00e9dent<\/a><\/strong>, nous avons cr\u00e9\u00e9 un registre qui va \u00eatre utilis\u00e9 pour stocker toutes les diff\u00e9rentes classes charg\u00e9es de donner \u00e0 notre widget sa fonctionnalit\u00e9.<\/p>\n<p>Pour ce faire, il y aura une vari\u00e9t\u00e9 d&rsquo;autres classes introduites, mais avant d&rsquo;y aller, nous devons ajouter le registre au bootstrap du plugin (et encore moins cr\u00e9er un bootstrap pour le plugin).<\/p>\n<p>Plus pr\u00e9cis\u00e9ment, voici o\u00f9 nous nous sommes arr\u00eat\u00e9s\u00a0:<\/p>\n<blockquote>\n<p>Comme mentionn\u00e9 pr\u00e9c\u00e9demment dans le post, nous devons ajouter ceci au bootstrap du plugin. Pour ce faire, cependant, nous devons d\u00e9finir notre propre filtre afin de pouvoir facilement passer le registre autour du reste du plugin (le moment venu).<\/p>\n<\/blockquote>\n<p>Donc, dans cet article, nous allons nous concentrer sur cela.<\/p>\n<h2>Le passe-partout du widget WordPress\u00a0: refactorisation, partie\u00a05<\/h2>\n<p>Si vous avez suivi la s\u00e9rie jusqu&rsquo;\u00e0 pr\u00e9sent, vous devriez \u00eatre en bonne position sp\u00e9cifiquement pour ajouter le registre afin que nous y ayons acc\u00e8s tout au long du plugin.<\/p>\n<p>Pour ce faire, cependant, suppose que vous savez comment d\u00e9finir vos filtres. Dans WordPress, <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nous utilisons tout le temps des actions et des filtres<\/a>.<\/p>\n<p>La chose \u00e0 propos de ces crochets est qu&rsquo;ils sont d\u00e9j\u00e0 d\u00e9finis, cependant. Alors, comment d\u00e9finissons-nous notre filtre\u00a0?<\/p>\n<p>Voyons comment faire exactement cela.<\/p>\n<h3>1 D\u00e9finir notre filtre<\/h3>\n<p>Tout d&rsquo;abord, nous devons comprendre quelques concepts :<\/p>\n<ul>\n<li>qu&rsquo;est-ce qu&rsquo;un filtre,<\/li>\n<li>comment ajouter un filtre,<\/li>\n<li>comment introduire notre registre dans le filtre<\/li>\n<li>comment r\u00e9cup\u00e9rer la classe du filtre.<\/li>\n<\/ul>\n<p>Heureusement, tout ce qui pr\u00e9c\u00e8de est facile \u00e0 expliquer.<\/p>\n<h4>Qu&rsquo;est-ce qu&rsquo;un filtre\u00a0?<\/h4>\n<p>En termes simples, les crochets nous permettent d&rsquo;appeler WordPress \u00e0 des moments pr\u00e9cis pendant l&rsquo;ex\u00e9cution du programme. Les actions sont g\u00e9n\u00e9ralement r\u00e9serv\u00e9es au comportement ; Les filtres sont r\u00e9serv\u00e9s aux donn\u00e9es.<\/p>\n<p>De plus, les filtres nous permettent de travailler avec des donn\u00e9es sp\u00e9cifiques dans l&rsquo;application &#8211; il peut s&rsquo;agir de donn\u00e9es pr\u00e9existantes ou m\u00eame de nouvelles donn\u00e9es. Et dans notre cas, ce sera la classe Registry qui contient des r\u00e9f\u00e9rences \u00e0 d&rsquo;autres donn\u00e9es.<\/p>\n<h4>Ajout d&rsquo;un filtre<\/h4>\n<p>L&rsquo;ajout d&rsquo;un filtre est facile. Il comporte trois parties\u00a0:<\/p>\n<ol>\n<li>appeler <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_filter\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">add_filter<\/a> ,<\/li>\n<li>d\u00e9finir un identifiant unique pour le filtre,<\/li>\n<li>transmettre des informations au filtre qui peuvent \u00eatre renvoy\u00e9es chaque fois qu&rsquo;il est appel\u00e9.<\/li>\n<\/ol>\n<p>Pour nous, je vais identifier notre registre comme le filtre <strong>wpWidgetRegistry<\/strong>. Notez cependant qu&rsquo;il est important que vous choisissiez un nom unique pour votre impl\u00e9mentation, car si vous ne le faites pas, vous pourriez vous retrouver avec des collisions avec d&rsquo;autres donn\u00e9es si un autre plugin utilise le m\u00eame identifi\u00e9.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161108-61e71bc432bb7.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-161108-61e71bc432bb7.png\" alt=\"Widgets WordPress : refactorisation, partie 5\" ><\/a><\/p>\n<p>Quoi qu&rsquo;il en soit, l&rsquo;ajout d&rsquo;un filtre effectue une t\u00e2che simple\u00a0:<\/p>\n<blockquote>\n<p>Accrochez une fonction ou une m\u00e9thode \u00e0 une action de filtre sp\u00e9cifique.<\/p>\n<\/blockquote>\n<p>Cela signifie donc que nous devons d\u00e9finir une m\u00e9thode avec notre ID. En raison de la nature de PHP, nous n&rsquo;avons pas besoin d&rsquo;utiliser une fonction distincte.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-161108-61e71bc81c90d.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-161108-61e71bc81c90d.png\" alt=\"Widgets WordPress : refactorisation, partie 5\" ><\/a><\/p>\n<p>Au lieu de cela, nous pouvons utiliser <a href=\"https:\/\/secure.php.net\/manual\/en\/functions.anonymous.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">une fonction anonyme<\/a>.<\/p>\n<blockquote>\n<p>Les fonctions anonymes, \u00e9galement appel\u00e9es fermetures, permettent la cr\u00e9ation de fonctions qui n&rsquo;ont pas de nom sp\u00e9cifi\u00e9. Ils sont surtout utiles en tant que valeur des param\u00e8tres de rappel, mais ils ont de nombreuses autres utilisations.<\/p>\n<\/blockquote>\n<p>La fonction anonyme que nous allons d\u00e9finir acceptera une r\u00e9f\u00e9rence au plugin comme argument, puis la renverra chaque fois que le filtre sera appel\u00e9 (ce qui sera montr\u00e9 plus loin dans cet article).<\/p>\n<h4>Transmission d&rsquo;informations \u00e0 notre filtre<\/h4>\n<p>Maintenant que tout cela est couvert, nous pouvons passer par le processus de cr\u00e9ation d&rsquo;une instance de notre registre, d\u00e9finir un filtre, puis ajouter le registre, afin qu&rsquo;il soit accessible dans toute l&rsquo;application.<\/p>\n<p>Ainsi, dans le fichier principal du plugin, c&rsquo;est-\u00e0-dire le fichier <strong>wordpress-widget-boilerplate.php<\/strong>, nous ajoutons <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c3617efbbfd2a47c432f69dd41ce312c#file-00-bootstrap-namespace-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">les lignes de code suivantes<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace WordPressWidgetBoilerplate;\n\nuse WordPressWidgetBoilerplateUtilitiesRegistry;\n\n\/\/ More to come...\n<\/code><\/pre>\n<p>Ce qui pr\u00e9c\u00e8de d\u00e9clare l&rsquo;espace de noms dans lequel r\u00e9side le registre. Ensuite, nous <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c3617efbbfd2a47c432f69dd41ce312c#file-01-bootstrap-registry-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ajoutons le bloc de code suivant sous le chargeur automatique\u00a0:<\/a><\/p>\n<pre><code>&lt;?php\n\n\/\/ Setup a filter so we can retrieve the registry throughout the plugin.\n$registry = new Registry();\nadd_filter('wpWidgetRegistry', function() use ($registry) {\n    return $registry;\n});\n<\/code><\/pre>\n<p>Notez que lorsque vous visez \u00e0 activer le plugin, il ne s&rsquo;activera pas et g\u00e9n\u00e9rera une erreur. C&rsquo;est \u00e0 cause de l&rsquo;absence d&rsquo;un chargeur automatique qui sera discut\u00e9 dans le prochain post.<\/p>\n<h3>2 R\u00e9cup\u00e9ration de notre registre<\/h3>\n<p>\u00c9tant donn\u00e9 que le registre est d\u00e9fini dans le bootstrap du plugin et se fait gr\u00e2ce \u00e0 l&rsquo;utilisation d&rsquo;un filtre, nous pouvons acc\u00e9der au registre n&rsquo;importe o\u00f9 dans notre plugin en appelant notre filtre personnalis\u00e9.<\/p>\n<p>Par exemple, disons que nous sommes dans une autre classe et que nous devons obtenir une r\u00e9f\u00e9rence au registre. Pour ce faire, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/c3617efbbfd2a47c432f69dd41ce312c#file-02-retrieve-registry-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">nous pouvons faire cet appel<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Retrieve the registry anywhere in the plugin.\n$registry = apply_filters('wpWidgetRegistry', null);\n<\/code><\/pre>\n<p>Et c&rsquo;est tout. Facile, non? Tant que tout a \u00e9t\u00e9 correctement ajout\u00e9 au registre &#8211; ce qui sera bient\u00f4t couvert &#8211; nous pourrons alors acc\u00e9der \u00e0 chacun d&rsquo;eux via les identifiants uniques que nous avons utilis\u00e9s dans <a href=\"https:\/\/tommcfarlin.com\/wordpress-widgets-part-4\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le post pr\u00e9c\u00e9dent.<\/a><\/p>\n<h2>Le chargeur automatique<\/h2>\n<p>Nous commen\u00e7ons maintenant \u00e0 utiliser des espaces de noms et \u00e0 utiliser d&rsquo;autres classes. Cela signifie que nous allons devoir utiliser des chargeurs automatiques.<\/p>\n<p>Donc, avant d&rsquo;entrer dans la refactorisation de la classe enti\u00e8re telle qu&rsquo;elle est actuellement, nous allons faire un l\u00e9ger d\u00e9tour dans certaines des fonctionnalit\u00e9s de Composer pour voir comment il est utilis\u00e9 pour g\u00e9n\u00e9rer un chargeur automatique (en plus des choses que nous sommes d\u00e9j\u00e0 l&rsquo;utiliser pour g\u00e9rer la qualit\u00e9 de notre code source).<\/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>Une fois que nous avons un registre, nous devons pouvoir y acc\u00e9der via notre plugin et nous le faisons avec des crochets personnalis\u00e9s.<\/p>\n","protected":false},"author":1,"featured_media":236152,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,717,801,862],"tags":[1167],"class_list":["post-231206","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-php-3","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231206","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=231206"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231206\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/236152"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231206"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231206"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}