{"id":230293,"date":"2022-11-26T20:06:00","date_gmt":"2022-11-26T17:06:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230293"},"modified":"2022-11-09T21:00:00","modified_gmt":"2022-11-09T18:00:00","slug":"comment-supprimer-les-caracteres-speciaux-des-permaliens","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/comment-supprimer-les-caracteres-speciaux-des-permaliens\/","title":{"rendered":"Comment supprimer les caract\u00e8res sp\u00e9ciaux des permaliens"},"content":{"rendered":"\n<p>Chaque fois que vous travaillez avec WordPress et des API tierces, il y a toujours une chance que vous rencontriez des probl\u00e8mes o\u00f9 l&rsquo;API tierce n&rsquo;est pas pr\u00eate \u00e0 g\u00e9rer certains caract\u00e8res qui existent dans un permalien.<\/p>\n<p>Selon les param\u00e8tres de permalien, cependant, cela peut ou non \u00eatre un probl\u00e8me. Par exemple, vos permaliens peuvent \u00eatre d\u00e9finis sur quelque chose comme<strong>\u00a0?p=123<\/strong> pour chaque publication. Dans ce cas, ce n&rsquo;est pas vraiment un probl\u00e8me.<\/p>\n<p>Mais si vous utilisez de &quot;jolis permaliens&quot; et que votre permalien inclut quelque chose comme un symbole de marque ou un symbole de droit d&rsquo;auteur, cela peut causer des probl\u00e8mes chaque fois que vous communiquez avec ladite API tierce.<\/p>\n<p>Premi\u00e8rement, si vous utilisez de jolis permaliens, ceux-ci sont g\u00e9n\u00e9ralement cr\u00e9\u00e9s \u00e0 partir du titre du message. Donc, si vous utilisez quelque chose comme All About The Acme Machine\u2122, vous g\u00e9n\u00e9rerez un lien permanent qui inclut quelque chose comme \u00e7a.<\/p>\n<p>Par exemple, WordPress peut g\u00e9n\u00e9rer automatiquement quelque chose comme ceci: <a href=\"https:\/\/acme.com\/all-about-the-acme%C2%AE-machine\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">https:\/\/acme.com\/all-about-the-acme\u00ae-machine\/<\/a><\/p>\n<p>Et quand vient le temps d&rsquo;envoyer ces informations \u00e0 une API tierce (ou d&rsquo;essayer de les traiter en utilisant tout ce qui n&rsquo;est pas pr\u00e9par\u00e9 pour de tels caract\u00e8res), vous allez rencontrer des probl\u00e8mes.<\/p>\n<p>Heureusement, WordPress fournit un crochet qui nous permet de traiter les permaliens avant qu&rsquo;ils ne soient s\u00e9rialis\u00e9s dans la base de donn\u00e9es. \u00c0 savoir, il s&rsquo;agit du crochet <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Filter_Reference\/wp_insert_post_data\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wp_insert_post_data<\/a>.<\/p>\n<p>Et dans ce cas, cela fonctionne comme ceci :<\/p>\n<ol>\n<li>Configurez le hook pour qu&rsquo;il se d\u00e9clenche tard dans le processus de s\u00e9rialisation,<\/li>\n<li>Recherchez les caract\u00e8res qui peuvent \u00eatre probl\u00e9matiques,<\/li>\n<li>Remplacez-les par une cha\u00eene vide,<\/li>\n<li>Renvoyez les informations mises \u00e0 jour \u00e0 WordPress pour la s\u00e9rialisation.<\/li>\n<\/ol>\n<p><strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/035b213bd632d2ab9fc4a79acffa1342#file-00-processpermalink-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Voici un exemple<\/a><\/strong> qui cherche \u00e0 supprimer divers symboles tels que les symboles de copyright, les symboles de marque, les symboles d&rsquo;enregistrement et d&rsquo;autres variantes de ceux-ci, \u00e0 la fois dans les formats cod\u00e9s et dans les \u00e9quivalents cod\u00e9s\u00a0:<\/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>Notez que la fonction accepte les donn\u00e9es de publication comme argument, v\u00e9rifie que vous ne travaillez pas avec un brouillon, un article en attente ou un brouillon automatique, puis supprime le contenu du nom de la publication en<\/p>\n<p>Cela peut \u00eatre une question nuanc\u00e9e. C&rsquo;est-\u00e0-dire que vous ne le rencontrerez peut-\u00eatre pas dans vos efforts de d\u00e9veloppement. Si, en revanche, vous le faites, cela fournit une solution qui vous permet non seulement de supprimer certains caract\u00e8res de l&rsquo;URL, mais vous permet \u00e9galement de le faire de mani\u00e8re \u00e9volutive.<\/p>\n<p>Ainsi, \u00e0 mesure que vos besoins changent, vous pouvez simplement mettre \u00e0 jour l&rsquo; appel <strong><a href=\"https:\/\/php.net\/manual\/en\/function.preg-replace.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">preg_replace<\/a><\/strong> avec les caract\u00e8res que vous devez supprimer de votre URL.<\/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 solution de suppression des caract\u00e8res probl\u00e9matiques des permaliens WordPress et de mani\u00e8re \u00e9volutive.<\/p>\n","protected":false},"author":1,"featured_media":164255,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,893,832,841,862],"tags":[1167],"class_list":["post-230293","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-code-2","category-guide-pour-les-debutants","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230293","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=230293"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/230293\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/164255"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=230293"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=230293"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=230293"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}