{"id":231349,"date":"2022-12-21T10:47:00","date_gmt":"2022-12-21T07:47:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231349"},"modified":"2022-12-21T10:51:15","modified_gmt":"2022-12-21T07:51:15","slug":"suggestions-pour-organiser-le-code-de-procedure","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/suggestions-pour-organiser-le-code-de-procedure\/","title":{"rendered":"Suggestions pour organiser le code de proc\u00e9dure"},"content":{"rendered":"\n<p>Pour autant que j&rsquo;\u00e9cris sur \u2013 et suis un fan de \u2013 la programmation orient\u00e9e objet, je n&rsquo;\u00e9cris pas beaucoup sur l&rsquo;\u00e9poque o\u00f9 je travaille avec une <a href=\"https:\/\/en.wikipedia.org\/wiki\/Procedural_programming\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">base de code proc\u00e9dural<\/a>.<\/p>\n<blockquote>\n<p>La programmation proc\u00e9durale est un paradigme de programmation, d\u00e9riv\u00e9 de la programmation structur\u00e9e, bas\u00e9 sur le concept d&rsquo;appel de proc\u00e9dure. Les proc\u00e9dures, \u00e9galement appel\u00e9es routines, sous-routines ou fonctions, contiennent simplement une s\u00e9rie d&rsquo;\u00e9tapes de calcul \u00e0 effectuer.<\/p>\n<\/blockquote>\n<p>Parfois, cela vient des exigences d&rsquo;un projet, parfois d&rsquo;un projet dont j&rsquo;ai h\u00e9rit\u00e9, ou parfois \u00e0 cause d&rsquo;autre chose.<\/p>\n<p>Je pense qu&rsquo;il est important qu&rsquo;en tant que programmeurs, nous ne maintenions pas un paradigme si \u00e9lev\u00e9 que nous h\u00e9sitions \u00e0 travailler avec d&rsquo;autres fa\u00e7ons d&rsquo;\u00e9crire du code. Apr\u00e8s tout, l&rsquo;acte d&rsquo;\u00e9crire du code consiste essentiellement \u00e0 r\u00e9soudre un probl\u00e8me.<\/p>\n<p>La fa\u00e7on dont le probl\u00e8me est r\u00e9solu peut \u00eatre consid\u00e9r\u00e9e comme secondaire.<\/p>\n<p>Quoi qu&rsquo;il en soit, chaque fois que je travaille avec une base de code; cependant, c&rsquo;est \u00e9crit, j&rsquo;essaie toujours de m&rsquo;assurer qu&rsquo;il est organis\u00e9 de mani\u00e8re coh\u00e9rente, aussi facile \u00e0 suivre que possible et qu&rsquo;il puisse \u00eatre maintenu dans le temps.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160742-61e711c032aea.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-160742-61e711c032aea.png\" alt=\"Suggestions pour organiser le code de proc\u00e9dure\"><\/a><\/p>\n<p>J&rsquo;ai pens\u00e9 que je partagerais comment j&rsquo;aborde l&rsquo;\u00e9criture de plugins WordPress en utilisant la programmation proc\u00e9durale par rapport \u00e0 la programmation orient\u00e9e objet et comment je m&rsquo;y prends pour organiser le code proc\u00e9dural.<\/p>\n<p>Si rien d&rsquo;autre, cela vous donnera peut-\u00eatre quelques id\u00e9es pour un projet en cours ou futur.<\/p>\n<h2>Code de proc\u00e9dure d&rsquo;organisation<\/h2>\n<p>Lorsqu&rsquo;il s&rsquo;agit de travailler avec du code proc\u00e9dural, il y a beaucoup de potentiel pour inclure presque tout dans un seul fichier monolithique.<\/p>\n<p>Je ne suis pas de cette approche car il est plus difficile de trouver o\u00f9 se trouve quelque chose dans le fichier (du moins si vous \u00eates quelqu&rsquo;un qui vient d&rsquo;entrer dans un projet).<\/p>\n<p>\u00c0 cette fin, ce sont les choses que je fais habituellement.<\/p>\n<ol>\n<li><strong>Actions et filtres s\u00e9par\u00e9s<\/strong>. En r\u00e8gle g\u00e9n\u00e9rale, je prendrai toutes les actions et les placerai dans un fichier et je prendrai tous les filtres et les placerai dans un autre fichier. Il est \u00e9galement possible de s\u00e9parer davantage ces fichiers dans des sous-r\u00e9pertoires (sinon des espaces de noms \u00e9galement) en fonction de leurs domaines d&rsquo;int\u00e9r\u00eat. Par exemple, toutes les actions li\u00e9es \u00e0 la zone d&rsquo;administration peuvent aller dans un sous-r\u00e9pertoire <strong>admin .<\/strong><\/li>\n<li><strong>\u00c9crire un fichier de d\u00e9bogage<\/strong>. J&rsquo;inclus normalement un script de d\u00e9bogage simple dans un plugin afin de pouvoir facilement afficher les informations de d\u00e9bogage \u00e0 l&rsquo;\u00e9cran, \u00e9crire dans le fichier journal de d\u00e9bogage ou \u00e9crire dans les deux. Cela peut \u00eatre une commodit\u00e9 si rien d&rsquo;autre, mais cela aide \u00e0 fournir un moyen de voir facilement ce qui se passe sans avoir besoin de <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/utiliser-xdebug-avec-valet-et-wordpress\/\" title=\"lancer Xdebug\">lancer Xdebug<\/a> et de parcourir le code (sauf s&rsquo;il s&rsquo;agit d&rsquo;un probl\u00e8me plus compliqu\u00e9).<\/li>\n<li><strong>Chargeur automatique<\/strong>. Si vous utilisez du code proc\u00e9dural, vous n&rsquo;utilisez peut-\u00eatre pas du tout d&rsquo;espaces de <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/espaces-de-noms-et-chargement-automatique-dans-wordpress\/\" title=\"noms\">noms<\/a>, mais si c&rsquo;est le cas, j&rsquo;inclus \u00e9galement un chargeur automatique que j&rsquo;ai \u00e9crit pour faciliter l&rsquo;inclusion automatique de fichiers. Ceci est diff\u00e9rent du chargeur automatique <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/compositeur-pour-wordpress-partie-1\/\" title=\"g\u00e9n\u00e9r\u00e9 par Composer\">g\u00e9n\u00e9r\u00e9 par Composer<\/a>, mais il fait toujours la m\u00eame chose.<\/li>\n<\/ol>\n<p>De toute \u00e9vidence, il n&rsquo;y a rien de fondamentalement compliqu\u00e9 dans les recommandations ci-dessus. En fait, je dirais que n&rsquo;importe lequel des \u00e9l\u00e9ments ci-dessus, en particulier la premi\u00e8re \u00e9tape, peut grandement contribuer \u00e0 am\u00e9liorer la g\u00e9rabilit\u00e9 du code proc\u00e9dural.<\/p>\n<h2>Le fichier principal du plugin<\/h2>\n<p>Si vous choisissez de faire tout ce qui pr\u00e9c\u00e8de, la version finale du fichier d&rsquo;amor\u00e7age du plugin devrait \u00eatre tr\u00e8s simple. En fait, cela peut ressembler \u00e0 quelque chose d&rsquo;aussi simple <a href=\"https:\/\/gist.github.com\/tommcfarlin\/777bb0180968134a3c40ebecb241d2ad\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">que ceci<\/a> :<\/p>\n<pre><code>&lt;?php\n\/**\n * Plugin Name: Acme Plugin\n * Plugin URI:  https:\/\/acmeplugins.com\/acme\n * Description: This is the plugin description.\n * Version:     1.0.0\n * Author:      Acme Plugins Co.\n * Author URI:  https:\/\/acmeplugins.com\/acme\n * License:     GPL-3.0+\n * License URI: http:\/\/www.gnu.org\/licenses\/gpl-3.0.txt\n *\n * @since   1.0.0\n * @package Acme\n *\/\n\nnamespace Acme;\n\ndefined( 'WPINC') || die;\n\n\/\/ Include the custom autoloader.\nrequire_once __DIR__. '\/inc\/autoload.php';\n\n\/\/ Include action and filters.\nrequire_once __DIR__. '\/inc\/actions.php';\nrequire_once __DIR__. '\/inc\/filters.php';\n<\/code><\/pre>\n<p>Encore une fois, cela suppose que vous appliquez les trois recommandations. Si ce n&rsquo;est pas le cas, votre impl\u00e9mentation peut varier.<\/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>Comment j&rsquo;\u00e9cris des plugins WordPress en utilisant la programmation proc\u00e9durale par rapport \u00e0 la programmation orient\u00e9e objet et comment j&rsquo;organise le code proc\u00e9dural.<\/p>\n","protected":false},"author":1,"featured_media":235594,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,717,841,862],"tags":[1167],"class_list":["post-231349","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-developpeur","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231349","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=231349"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231349\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/235594"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231349"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231349"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}