{"id":230653,"date":"2022-12-05T13:09:00","date_gmt":"2022-12-05T10:09:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230653"},"modified":"2022-11-09T23:23:29","modified_gmt":"2022-11-09T20:23:29","slug":"les-bases-des-crochets-daction-dans-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/les-bases-des-crochets-daction-dans-wordpress\/","title":{"rendered":"Les bases des crochets d&rsquo;action dans WordPress"},"content":{"rendered":"\n<p>Chaque fois que vous commencez \u00e0 vous lancer dans une programmation plus avanc\u00e9e &#8211; que ce soit dans WordPress ou dans tout autre framework, biblioth\u00e8que, fondation ou langage de programmation &#8211; il y a des moments o\u00f9 de nouveaux concepts peuvent souvent \u00eatre plus difficiles \u00e0 comprendre que d&rsquo;autres.<\/p>\n<p>J&rsquo;ai g\u00e9n\u00e9ralement constat\u00e9 que cela \u00e9tait vrai chaque fois qu&rsquo;une personne a appris les bases de, disons, la programmation orient\u00e9e objet mais n&rsquo;a pas \u00e9t\u00e9 expos\u00e9e aux nuances de certaines choses telles que les mod\u00e8les de conception.<\/p>\n<p>Exemple: j&rsquo;ai \u00e9crit sur <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Event-driven_architecture\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le mod\u00e8le de conception pilot\u00e9 par les \u00e9v\u00e9nements<\/a><\/strong> (ou la <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Publish%E2%80%93subscribe_pattern\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">publication-abonnement<\/a><\/strong> ou Pub\/Sub comme certains aiment l&rsquo;appeler) <strong><a href=\"https:\/\/tommcfarlin.com\/wordpress-hooks\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dans d&rsquo;autres articles.<\/a><\/strong><\/p>\n<p>Oui, il y a des diff\u00e9rences pour chacun, mais l&rsquo;id\u00e9e g\u00e9n\u00e9rale est que quelque chose se passe et qu&rsquo;un \u00e9v\u00e9nement est d\u00e9clench\u00e9 et que tout ce qui \u00e9coute cet \u00e9v\u00e9nement ou s&rsquo;y abonn\u00e9 r\u00e9pondra.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7466947738.jpg\" 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-162881-61e7466947738.jpg\" alt=\"Les bases des crochets d&#039;action dans WordPress\" ><\/a><\/p>\n<p>Photo de Claus Gr\u00fcnst\u00e4udl sur Unsplash<\/p>\n<p>C&rsquo;est le mod\u00e8le principal utilis\u00e9 par WordPress qui nous permet de nous accrocher litt\u00e9ralement \u00e0 certains points d&rsquo;ex\u00e9cution. Nous pouvons g\u00e9n\u00e9ralement les conceptualiser comme des crochets d&rsquo;action dans WordPress.<\/p>\n<p>Quoi qu&rsquo;il en soit, l&rsquo;application met certains points \u00e0 notre disposition pour ajouter nos propres fonctionnalit\u00e9s. Une fois cette fonctionnalit\u00e9 enregistr\u00e9e, WordPress quittera sa base de code, pour ainsi dire, sautera dans la n\u00f4tre, puis reviendra \u00e0 la n\u00f4tre.<\/p>\n<p>C&rsquo;est assez facile \u00e0 comprendre, mais que se passe-t-il si vous voulez exposer des zones de votre code qui permettent \u00e0 d&rsquo;autres de s&rsquo;y accrocher\u00a0?<\/p>\n<h2>Crochets d&rsquo;action dans WordPress<\/h2>\n<p>Avant de voir comment WordPress impl\u00e9mente ces mod\u00e8les, il est important de comprendre les bases de ce mod\u00e8le. Bien que ce ne soit en aucun cas exhaustif, il est destin\u00e9 \u00e0 aider \u00e0 donner une compr\u00e9hension fondamentale du mod\u00e8le afin qu&rsquo;il soit possible de lire et d&rsquo;\u00e9crire du code centr\u00e9 sur WordPress.<\/p>\n<p>Alors, quelle est une bonne fa\u00e7on de penser au mod\u00e8le Pub\/Sub\u00a0? <strong><a href=\"https:\/\/en.wikipedia.org\/wiki\/Publish%E2%80%93subscribe_pattern\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Wikip\u00e9dia le d\u00e9finit ainsi :<\/a><\/strong><\/p>\n<blockquote>\n<p>Dans l&rsquo;architecture logicielle, la publication-abonnement est un mod\u00e8le de messagerie dans lequel les exp\u00e9diteurs de messages, appel\u00e9s \u00e9diteurs, ne programment pas les messages \u00e0 envoyer directement \u00e0 des destinataires sp\u00e9cifiques, appel\u00e9s abonn\u00e9s, mais classent plut\u00f4t les messages publi\u00e9s dans des classes sans savoir quels abonn\u00e9s, le cas \u00e9ch\u00e9ant., il peut y avoir. De m\u00eame, les abonn\u00e9s expriment leur int\u00e9r\u00eat pour une ou plusieurs classes et ne re\u00e7oivent que les messages qui les int\u00e9ressent, sans savoir quels \u00e9diteurs, s&rsquo;il y en a.<\/p>\n<\/blockquote>\n<h3>Comprendre le mod\u00e8le<\/h3>\n<p>Cela pourrait \u00eatre beaucoup \u00e0 prendre au d\u00e9but. Je ne sais pas, mais d\u00e9composons-le:<\/p>\n<ol>\n<li>Il existe un service, dans notre cas \u00e9tant WordPress, qui est charg\u00e9 de publier des messages \u00e0 l&rsquo;attention de celui qui s&rsquo;abonne (il ne sait pas n\u00e9cessairement qui \u00e9coute).<\/li>\n<li>Lorsqu&rsquo;un abonn\u00e9 \u00e9coute, il entreprendra alors une action chaque fois qu&rsquo;il entendra cette action.<\/li>\n<li>Une fois l&rsquo;ex\u00e9cution du code de l&rsquo;abonn\u00e9 termin\u00e9e, le programme reviendra ensuite au point d&rsquo;ex\u00e9cution d&rsquo;origine (qui est l&rsquo;endroit o\u00f9 l&rsquo;\u00e9diteur a envoy\u00e9 le message).<\/li>\n<\/ol>\n<p>Il y a des nuances \u00e0 cela, comme la fonctionnalit\u00e9 asynchrone et des choses comme \u00e7a, mais c&rsquo;est plus avanc\u00e9 que ce que je pr\u00e9f\u00e9rerais obtenir dans ce post particulier. Apr\u00e8s tout, le but est de jeter les bases de la compr\u00e9hension et de la mise en \u0153uvre des fonctionnalit\u00e9s.<\/p>\n<p>La fonctionnalit\u00e9 asynchrone peut entrer dans le threading ou Ajax et \u00e0 travers ce sont des sujets importants, ce n&rsquo;est pas ce post.<\/p>\n<h3>\u00c0 quoi cela ressemble-t-il dans WordPress\u00a0?<\/h3>\n<p>La fa\u00e7on la plus simple de d\u00e9crire ce mod\u00e8le particulier dans WordPress consiste peut-\u00eatre \u00e0 utiliser les appels de fonction\u00a0:<\/p>\n<ul>\n<li>faire_action<\/li>\n<li>add_action<\/li>\n<\/ul>\n<p>Parfois, la nomenclature peut pr\u00eater \u00e0 confusion mais en termes simples, <strong>do_action<\/strong> publie et un \u00e9v\u00e9nement et <strong>add_action<\/strong> abonn\u00e9s \u00e0 un \u00e9v\u00e9nement. Ou peut-\u00eatre une meilleure fa\u00e7on d&rsquo;y penser est<strong>:<\/strong><\/p>\n<p>do_action indique \u00e0 WordPress d&rsquo;effectuer toutes les actions ajout\u00e9es.<\/p>\n<p>Parfois, avoir des phrases simples pour se rappeler comment les choses fonctionnent est utile. Je ne sais pas si ce qui pr\u00e9c\u00e8de est la phrase la plus accrocheuse ou la plus m\u00e9morable, mais c&rsquo;est quelque chose, non\u00a0?<\/p>\n<p>De plus, notez que <strong>do_action<\/strong> et <strong>add_action<\/strong> sont des \u00e9l\u00e9ments essentiels de WordPress et sont \u00e9galement disponibles pour notre d\u00e9veloppement. Avant d&rsquo;aller plus loin, regardons ce que chacun signifie :<\/p>\n<p>Pour <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/do_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">do_action<\/a> :<\/p>\n<blockquote>\n<p>Cette fonction invoque toutes les fonctions attach\u00e9es \u00e0 l&rsquo;action hook <code>$tag<\/code>. Il est possible de cr\u00e9er de nouveaux crochets d&rsquo;action en appelant simplement cette fonction, en sp\u00e9cifiant le nom du nouveau crochet \u00e0 l&rsquo;aide du <code>$tag<\/code>param\u00e8tre.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7466d56bdd.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-162881-61e7466d56bdd.png\" alt=\"Les bases des crochets d&#039;action dans WordPress\" ><\/a><\/p>\n<p>Ou encore plus simplement :<\/p>\n<blockquote>\n<p>Ex\u00e9cutez des fonctions accroch\u00e9es \u00e0 un hook d&rsquo;action sp\u00e9cifique.<\/p>\n<\/blockquote>\n<p>Lorsque vous faites r\u00e9f\u00e9rence \u00e0 des crochets, il peut s&rsquo;agir <strong><a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Hooks\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">de crochets d\u00e9finis par WordPress<\/a><\/strong> ou de crochets personnalis\u00e9s que vous sp\u00e9cifiez dans votre th\u00e8me ou votre plugin.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7467368f0b.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-162881-61e7467368f0b.png\" alt=\"Les bases des crochets d&#039;action dans WordPress\" ><\/a><\/p>\n<p>Quant \u00e0 <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/add_action\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">add_action<\/a> :<\/p>\n<blockquote>\n<p>Les actions sont les crochets que le noyau de WordPress lance \u00e0 des moments sp\u00e9cifiques lors de l&rsquo;ex\u00e9cution, ou lorsque des \u00e9v\u00e9nements sp\u00e9cifiques se produisent. Les plugins peuvent sp\u00e9cifier qu&rsquo;une ou plusieurs de ses fonctions PHP sont ex\u00e9cut\u00e9es \u00e0 ces points, \u00e0 l&rsquo;aide de l&rsquo;API d&rsquo;action.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-162881-61e7467888f17.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-162881-61e7467888f17.png\" alt=\"Les bases des crochets d&#039;action dans WordPress\" ><\/a><\/p>\n<p>Et, de m\u00eame, plus simplement :<\/p>\n<blockquote>\n<p>Accroche une fonction \u00e0 une action sp\u00e9cifique.<\/p>\n<\/blockquote>\n<p>Le r\u00e9glage de ceci est pratiquement un peu diff\u00e9rent car nous utilisons g\u00e9n\u00e9ralement <strong>add_action<\/strong> pour ajouter notre propre code \u00e0 WordPress.<\/p>\n<h3>Un exemple pratique<\/h3>\n<p>Par exemple, vous avez peut-\u00eatre \u00e9crit quelque chose <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/035b213bd632d2ab9fc4a79acffa1342\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">comme ceci :<\/a><\/strong><\/p>\n<pre><code>&lt;?php\nadd_action('wp_insert_post_data', __NAMESPACE__. 'processPermalink');\n\/**\n * Processes the permalink so we can remove any characters that may cause a problem when communicating\n * with the API.\n *\n * @param  array $data The array of information about the post.\n * @return array $data The data without the malformed information in the post name for the URL.\n *\/\npublic function processPermalink($data)\n{\n    if (!in_array($data['post_status'], array('draft', 'pending', 'auto-draft'))) {\n        $data['post_name'] =\n            preg_replace(\n                '\/(%ef%b8%8f|\u2122|\u00ae|\u00a9|\u2122|\u00ae|\u00a9|\u2122|\u00ae|\u00a9)\/',\n                '',\n                $data['post_name']\n            );\n    }\n    return $data;\n}\n<\/code><\/pre>\n<p>Dans ce cas, quelque part dans la base de code WordPress, il y a un appel <strong>do_action<\/strong> pour le crochet <strong>wp_insert_post_data<\/strong> et il accepte une fonction et lui transmettra au moins un seul param\u00e8tre.<\/p>\n<h3>Ajouter vos propres crochets<\/h3>\n<p>Mais que se passe-t-il si vous voulez donner \u00e0 d&rsquo;autres d\u00e9veloppeurs la possibilit\u00e9 de s&rsquo;accrocher \u00e0 votre plugin ou \u00e0 votre th\u00e8me? Dans ce cas, vous devriez vous pr\u00e9occuper de l&rsquo;utilisation de do_action et la page li\u00e9e plus haut dans ce document fournit tout ce dont vous avez besoin pour le configurer.<\/p>\n<p>C&rsquo;est en fait beaucoup plus simple, \u00e0 mon avis, que de travailler avec <strong>add_action<\/strong> car <strong>add_action<\/strong> permet non seulement de se connecter \u00e0 un \u00e9diteur existant, mais aussi d&rsquo;ajouter notre propre logique personnalis\u00e9e.<\/p>\n<p><strong>do_action<\/strong> en revanche n\u00e9cessite que nous fournissions un nom de la fonction \u00e0 ex\u00e9cuter puis la liste des arguments \u00e0 passer \u00e0 la fonction qui sera ex\u00e9cut\u00e9e.<\/p>\n<h2>C&rsquo;est \u00e7a?<\/h2>\n<p>En termes aussi simples que possible, oui. Il y a quelques nuances autour de la priorit\u00e9, du nombre d&rsquo;arguments et de l&rsquo;utilisation des espaces de noms et de la programmation orient\u00e9e objet. Mais, encore une fois, cela sort du cadre de cet article particulier. Peut-\u00eatre que j&rsquo;y reviendrai plus en profondeur dans un autre article.<\/p>\n<p>Pour l&rsquo;instant, cependant, si vous n&rsquo;\u00eates pas familier avec les bases de\u00a0:<\/p>\n<ul>\n<li>le mod\u00e8le Pub\/Sub,<\/li>\n<li>faire_action,<\/li>\n<li>et add_action<\/li>\n<\/ul>\n<p>Vous \u00eates maintenant suffisamment \u00e0 l&rsquo;aise pour lire le code avec lequel vous travaillez, comprendre comment le code fonctionne et m\u00eame impl\u00e9menter vos propres solutions si n\u00e9cessaire.<\/p>\n<p>J&rsquo;\u00e9cris actuellement un livre \u00e9lectronique (avec une vari\u00e9t\u00e9 d&rsquo;autres contenus premium). Si vous \u00eates int\u00e9ress\u00e9, <a href=\"https:\/\/tommcfarlin.com\/registration-info\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">regardez ce que vous obtenez<\/a>.<\/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>Il est important de comprendre les bases des hooks d&rsquo;actions dans WordPress, mais avant cela, il est important de reconna\u00eetre le mod\u00e8le de conception sous-jacent.<\/p>\n","protected":false},"author":1,"featured_media":162882,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[862],"tags":[1167],"class_list":["post-230653","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230653","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=230653"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230653\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/162882"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=230653"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=230653"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=230653"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}