{"id":231500,"date":"2022-12-24T12:40:00","date_gmt":"2022-12-24T09:40:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231500"},"modified":"2022-12-07T10:58:45","modified_gmt":"2022-12-07T07:58:45","slug":"utilisation-de-filtres-personnalises-avec-des-codes-courts","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/utilisation-de-filtres-personnalises-avec-des-codes-courts\/","title":{"rendered":"Utilisation de filtres personnalis\u00e9s avec des codes courts"},"content":{"rendered":"\n<p>Une fois que vous avez compris l&rsquo; <a href=\"https:\/\/codex.wordpress.org\/Shortcode_API\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">API Shortcode<\/a> et le fonctionnement des <a href=\"https:\/\/tommcfarlin.com\/wordpress-hooks\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">filtres<\/a>, il est facile de les impl\u00e9menter dans WordPress.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160133-61e705f31918c.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-160133-61e705f31918c.png\" alt=\"Utilisation de filtres personnalis\u00e9s avec des codes courts\" ><\/a><\/p>\n<p>Et lorsque vous \u00eates capable de m\u00e9langer les deux, vous pouvez faire beaucoup plus que d&rsquo;habitude que lorsqu&rsquo;ils fonctionnent ind\u00e9pendamment l&rsquo;un de l&rsquo;autre.<\/p>\n<p>Plus pr\u00e9cis\u00e9ment, vous pouvez filtrer les donn\u00e9es qui se trouvent dans le r\u00e9sultat du shortcode, ce qui peut \u00eatre particuli\u00e8rement utile pour les autres d\u00e9veloppeurs. Si vous \u00eates habitu\u00e9 \u00e0 impl\u00e9menter des filtres personnalis\u00e9s, le faire dans le contexte d&rsquo;un code court n&rsquo;est pas tr\u00e8s diff\u00e9rent.<\/p>\n<p>Mais si vous n&rsquo;avez jamais utilis\u00e9 l&rsquo;API de shortcode ou la fonctionnalit\u00e9 auparavant, c&rsquo;est toujours facile \u00e0 faire.<\/p>\n<h2>Filtres personnalis\u00e9s avec shortcodes<\/h2>\n<p>Pour cet article, nous utiliserons un exemple relativement artificiel. Autrement dit, le shortcode se traduira par quelque chose de statique. La raison en est que cela facilite la d\u00e9monstration dans un article et l&rsquo;impl\u00e9mentation dans votre code.<\/p>\n<h3>Le code court<\/h3>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/b264ef7e0af29b42651bf45ba50c64b2#file-00-a-simple-example-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Pour impl\u00e9menter un shortcode<\/a>, vous avez besoin de deux choses :<\/p>\n<ol>\n<li>un nom personnalis\u00e9 pour le shortcode,<\/li>\n<li>une fonction utilis\u00e9e pour d\u00e9poser des informations l\u00e0 o\u00f9 le shortcode est utilis\u00e9.<\/li>\n<\/ol>\n<pre><code>&lt;?php\n\nnamespace Acme;\n\nadd_shortcode('a_simple_example', __NAMESPACE__. 'aSimpleExample');\n\/**\n * Replaces [a_simple_example] short code with the text \"This is the result of an example shortcode.\"\n * whenever the shortcode is placed in a post or page.\n *\/\nfunction aSimpleExample()\n{\n  return 'This is the result of an example shortcode.';\n}<\/code><\/pre>\n<p>Notez dans le code ci-dessus; J&rsquo;ai pr\u00e9fix\u00e9 la fonction avec. <code>__NAMESPACE__<\/code>En effet, la fonction r\u00e9side dans un espace de noms personnalis\u00e9 (que vous pouvez voir en haut du fichier).<\/p>\n<p>Sans ce pr\u00e9fixe, la fonction ne sera pas appel\u00e9e. Si vous choisissez de ne pas utiliser d&rsquo;espaces de noms, vous pouvez renoncer \u00e0 la fois au pr\u00e9fixe et aux barres obliques du nom de votre fonction.<\/p>\n<p>Notez que nous reviendrons sur cette fonction d\u00e8s que nous aurons le filtre en place.<\/p>\n<h3>Le filtre<\/h3>\n<p>L&rsquo;ajout d&rsquo;un filtre personnalis\u00e9 est similaire \u00e0 l&rsquo;ajout d&rsquo;un shortcode. Vous avez besoin:<\/p>\n<ol>\n<li>un nom de filtre personnalis\u00e9,<\/li>\n<li>une fonction qui sert \u00e0 filtrer les informations entrantes (et les filtres doivent g\u00e9n\u00e9ralement accepter au moins un param\u00e8tre qui est, bien entendu, les donn\u00e9es \u00e0 filtrer) :<\/li>\n<\/ol>\n<p>Pour rester coh\u00e9rent avec l&rsquo;exemple ci-dessus disons que nous voulons juste <a href=\"https:\/\/gist.github.com\/tommcfarlin\/b264ef7e0af29b42651bf45ba50c64b2#file-01-a-simple-filter-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">remplacer quelques mots dans le shortcode<\/a> :<\/p>\n<pre><code>&lt;?php\n\nnamespace Acme;\n\nadd_filter('custom_shortcode_example', __NAMESPACE__. 'aSimpleShortcodeFilter');\n\/**\n * Replaces [a simple example] short code with the text \"This is the result of an example shortcode.\"\n * whenever the shortcode is placed in a post or page.\n *\n * @param string $input the input to filter.\n *\n * @return string       the result of the filter running on the input\n *\/\nfunction aSimpleShortcodeFilter(string $input): string\n{\n  return str_ireplace(\n    'an example shortcode.',\n    'a filtered shortcode',\n    $input\n  );\n}<\/code><\/pre>\n<p>Cela remplacera le contenu de\u00a0:<\/p>\n<p>Ceci est le r\u00e9sultat d&rsquo;un exemple de shortcode.<\/p>\n<p>\u00c0:<\/p>\n<p>Ceci est le r\u00e9sultat d&rsquo;un shortcode filtr\u00e9.<\/p>\n<p>Mais nous devons encore lier les deux ensemble.<\/p>\n<h2>Revisiter le shortcode<\/h2>\n<p>Pour associer les deux fonctions ensemble, nous devons nous assurer que la fonction du shortcode applique le filtre \u00e0 la valeur qu&rsquo;elle renvoie.<\/p>\n<p>Heureusement, <a href=\"https:\/\/gist.github.com\/tommcfarlin\/b264ef7e0af29b42651bf45ba50c64b2#file-02-a-filtered-shortcode-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sa mise en \u0153uvre est simple d&rsquo;<\/a> autant plus que nous avons tout ce dont nous avons besoin :<\/p>\n<pre><code>&lt;?php\n\nnamespace Acme;\n\nadd_shortcode('a_simple_example', __NAMESPACE__. 'aSimpleExample');\n\/**\n * Replaces [a_simple_example] short code with the text \"This is the result of an example shortcode.\"\n * whenever the shortcode is placed in a post or page.\n *\/\nfunction aSimpleExample()\n{\n  return apply_filters('custom_shortcode_example', 'This is the result of an example shortcode.');\n}\n<\/code><\/pre>\n<p>Dans un exemple plus concret, je recommande toujours de v\u00e9rifier que le r\u00e9sultat du param\u00e8tre n&rsquo;est pas vide, qu&rsquo;il contient la cha\u00eene que je recherche, ou quelque chose de similaire.<\/p>\n<p>Autrement dit, j&rsquo;aime souvent ouvrir avec une clause de garde. Si le test \u00e9choue, je renvoie simplement la valeur entrante\u00a0; sinon, je filtrerai les donn\u00e9es et renverrai quel que soit le r\u00e9sultat de cette op\u00e9ration.<\/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>M\u00eame si vous n&rsquo;avez jamais utilis\u00e9 l&rsquo;API ou la fonctionnalit\u00e9 auparavant, il est facile de commencer \u00e0 impl\u00e9menter des filtres personnalis\u00e9s avec des codes abr\u00e9g\u00e9s.<\/p>\n","protected":false},"author":1,"featured_media":235705,"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-231500","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\/231500","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=231500"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231500\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/235705"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231500"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231500"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231500"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}