{"id":228885,"date":"2022-10-23T10:27:00","date_gmt":"2022-10-23T07:27:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228885"},"modified":"2022-11-09T04:39:54","modified_gmt":"2022-11-09T01:39:54","slug":"quand-utiliser-les-sous-actions-wordpress-et-quelles-sont-elles","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/quand-utiliser-les-sous-actions-wordpress-et-quelles-sont-elles\/","title":{"rendered":"Quand utiliser les sous-actions WordPress (et quelles sont-elles ?)"},"content":{"rendered":"\n<p>J&rsquo;ai r\u00e9cemment parcouru le processus d&rsquo;utilisation du constructeur d&rsquo;une classe pour <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/arreter-lexecution-du-plugin-sans-dependance\/\" title=\"emp\u00eacher un plugin de fonctionner\" >emp\u00eacher un plugin de fonctionner<\/a> si une d\u00e9pendance attendue n&rsquo;est pas charg\u00e9e.<\/p>\n<p>Bien que je ne consid\u00e8re pas cette strat\u00e9gie particuli\u00e8re comme un probl\u00e8me pour une d\u00e9pendance ponctuelle ou dans certaines situations, cela peut entra\u00eener des odeurs de code.<\/p>\n<p>Cela nous emp\u00eache \u00e9galement d&rsquo;utiliser une fonctionnalit\u00e9 native de Core appel\u00e9e sous-actions WordPress\u00a0:<\/p>\n<p><a href=\"https:\/\/twitter.com\/JJJ\/status\/822265137935646720\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/twitter.com\/JJJ\/status\/822265137935646720<\/a><\/p>\n<p>Mais avant d&rsquo;examiner les sous-actions, je veux m&rsquo;assurer que je suis clair sur les probl\u00e8mes li\u00e9s \u00e0 l&rsquo;approche conditionnelle (par rapport aux sous-actions) qui peuvent se reproduire avec les odeurs de code.<\/p>\n<h2>Sous-actions WordPress<\/h2>\n<p>Il existe de nombreuses fa\u00e7ons d&rsquo;expliquer les odeurs de code, mais ma fa\u00e7on pr\u00e9f\u00e9r\u00e9e <a href=\"https:\/\/en.wikipedia.org\/wiki\/Code_smell\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">vient de Martin Fowler<\/a> :<\/p>\n<blockquote>\n<p>\u2026 les odeurs sont certaines structures du code qui indiquent une violation des principes de conception fondamentaux et ont un impact n\u00e9gatif sur la qualit\u00e9 de la conception.<\/p>\n<\/blockquote>\n<p>Il y a une autre excellente page sur <a href=\"https:\/\/sourcemaking.com\/refactoring\/smells\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">les odeurs de code sur Source Making<\/a> que je vous recommande de lire si vous en avez l&rsquo;occasion.<\/p>\n<p>Et la fa\u00e7on dont les conditions peuvent conduire \u00e0 des odeurs de code est simple\u00a0: elles ont le potentiel de salir votre code avec un ensemble massif d&rsquo;instructions qui incluent de nombreuses v\u00e9rifications <a href=\"https:\/\/php.net\/manual\/en\/function.class-exists.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">class_exists<\/a>.<\/p>\n<p>Et c&rsquo;est un probl\u00e8me.<\/p>\n<p>Chaque fois que vous introduisez une autre d\u00e9pendance dans votre code, vous finissez par ajouter une autre v\u00e9rification conditionnelle pour voir si une classe est pr\u00e9sente dans l&rsquo;application WordPress.<\/p>\n<p>Je pense que c&rsquo;est correct de le faire avec une seule d\u00e9pendance &#8211; peut-\u00eatre m\u00eame deux d\u00e9pendances &#8211; et si vous travaillez &quot;assez haut&quot; dans votre architecture, mais ce n&rsquo;est pas comment g\u00e9rer correctement cela avec de nombreuses d\u00e9pendances ni \u00e0 un niveau inf\u00e9rieur dans votre plugin.<\/p>\n<p>C&rsquo;est l\u00e0 que les sous-actions WordPress entrent en jeu. Vous pouvez voir une liste de sous-actions dans le tweet via John ci-dessus.<\/p>\n<p>Il existe \u00e9galement une d\u00e9finition officielle des sous-actions dans le <a href=\"https:\/\/codex.bbpress.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">bbPress Codex<\/a>\u00a0:<\/p>\n<blockquote>\n<p>Ces actions internes peuvent \u00eatre consid\u00e9r\u00e9es comme des &quot;sous-actions&quot; et vous permettent d&rsquo;ajouter ou de r\u00e9organiser les actions WordPress selon les besoins pour les plugins qui d\u00e9pendent de bbPress.<\/p>\n<\/blockquote>\n<p>Et vous pouvez en voir un exemple <a href=\"https:\/\/bbpress.trac.wordpress.org\/browser\/trunk\/src\/includes\/core\/actions.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dans ce fichier<\/a>.<\/p>\n<p>Bien s\u00fbr, cette d\u00e9finition est sp\u00e9cifique \u00e0 bbPress, mais cela ne signifie pas qu&rsquo;elle ne s&rsquo;applique pas \u00e0 ce que nous faisons dans WordPress.<\/p>\n<p>Exemple concret\u00a0: si vous avez d\u00e9j\u00e0 utilis\u00e9 <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">do_action<\/a> pour d\u00e9finir une action personnalis\u00e9e, ou si vous avez profit\u00e9 d&rsquo;un crochet fourni par quelqu&rsquo;un d&rsquo;autre en dehors du c\u0153ur de WordPress, alors vous connaissez la strat\u00e9gie d&rsquo;impl\u00e9mentation d&rsquo;une sous-action.<\/p>\n<p>En d&rsquo;autres termes, les sous-actions WordPress sont simplement des actions que nous pouvons utiliser pour modifier l&rsquo;ordre dans lequel notre plugin d\u00e9pend d&rsquo;un autre plugin.<\/p>\n<p>La fa\u00e7on dont cela est impl\u00e9ment\u00e9 peut varier dans le contexte de votre travail, mais la mani\u00e8re WordPress la plus populaire et la plus \u00abcorrecte\u00bb de le faire est sans doute de tirer parti de l&rsquo; <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">argument de priorit\u00e9<\/a> pour le moment o\u00f9 votre plugin est charg\u00e9.<\/p>\n<p>Autrement dit, prenez la priorit\u00e9 de la d\u00e9pendance et assurez-vous qu&rsquo;elle est ant\u00e9rieure \u00e0 l&rsquo;activation de votre plugin.<\/p>\n<p>Il existe des m\u00e9thodes alternatives qui peuvent \u00eatre utilis\u00e9es, telles que la modification du comportement des plugins chaque fois qu&rsquo;ils sont activ\u00e9s ou non, mais cela sort du cadre de cet article particulier, et cela peut alt\u00e9rer n\u00e9gativement l&rsquo;exp\u00e9rience utilisateur (de WordPress en g\u00e9n\u00e9ral, pas moins).<\/p>\n<p>Quoi qu&rsquo;il en soit, le fait est que lorsqu&rsquo;il s&rsquo;agit d&rsquo;utiliser les sous-actions WordPress, la programmation orient\u00e9e objet et la gestion des d\u00e9pendances tierces, assurez-vous que les d\u00e9cisions que vous prenez n&rsquo;endommageront pas la conception de votre code.<\/p>\n<p>S&rsquo;il est logique de v\u00e9rifier l&rsquo;existence d&rsquo;une classe, d&rsquo;accord, mais s&rsquo;il est plus logique d&rsquo;attendre qu&rsquo;un ensemble de classes ou de plugins soit charg\u00e9 avant le v\u00f4tre, alors les sous-actions WordPress ont probablement plus de sens.<\/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>Lorsque vous utilisez des sous-actions WordPress, la POO et des d\u00e9pendances tierces, assurez-vous que vos d\u00e9cisions n&rsquo;endommageront pas la conception de votre code.<\/p>\n","protected":false},"author":1,"featured_media":221089,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,893,717,811,841,862],"tags":[1167],"class_list":["post-228885","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-code-2","category-developpeur","category-plugins-2","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/228885","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=228885"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/228885\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/221089"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=228885"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=228885"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=228885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}