{"id":230450,"date":"2022-11-26T20:09:00","date_gmt":"2022-11-26T17:09:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230450"},"modified":"2022-11-09T22:26:48","modified_gmt":"2022-11-09T19:26:48","slug":"como-remover-caracteres-especiais-de-links-permanentes","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/como-remover-caracteres-especiais-de-links-permanentes\/","title":{"rendered":"Como remover caracteres especiais de links permanentes"},"content":{"rendered":"\n<p>Sempre que voc\u00ea estiver trabalhando com o WordPress e APIs de terceiros, sempre h\u00e1 uma chance de encontrar problemas em que a API de terceiros n\u00e3o esteja preparada para lidar com determinados caracteres que existem em um link permanente.<\/p>\n<p>Dependendo das configura\u00e7\u00f5es de permalink, no entanto, isso pode ou n\u00e3o ser um problema. Por exemplo, voc\u00ea pode definir seus permalinks para algo como <strong>?p=123<\/strong> para cada postagem. Nesse caso, n\u00e3o \u00e9 um grande problema.<\/p>\n<p>Mas se voc\u00ea estiver usando &quot;bonitos permalinks&quot; e seu permalink incluir algo como um s\u00edmbolo de marca registrada ou um s\u00edmbolo de direitos autorais, isso poder\u00e1 causar problemas sempre que voc\u00ea estiver se comunicando com a referida API de terceiros.<\/p>\n<p>Primeiro, se voc\u00ea estiver usando links permanentes bonitos, eles geralmente s\u00e3o criados a partir do t\u00edtulo do post. Ent\u00e3o, se voc\u00ea usar algo como All About The Acme Machine\u2122 ir\u00e1 gerar um link permanente que inclui algo assim.<\/p>\n<p>Por exemplo, voc\u00ea pode fazer com que o WordPress gere automaticamente algo assim: <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>E quando chegar a hora de enviar essas informa\u00e7\u00f5es para uma API de terceiros (ou tentar process\u00e1-las usando qualquer coisa que n\u00e3o esteja preparada para esses caracteres), voc\u00ea ter\u00e1 problemas.<\/p>\n<p>Felizmente, o WordPress fornece um gancho que nos permite processar links permanentes antes de serem serializados no banco de dados. Ou seja, este \u00e9 o gancho <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>E neste caso, funciona assim:<\/p>\n<ol>\n<li>Configure o gancho para disparar no final do processo de serializa\u00e7\u00e3o,<\/li>\n<li>Procure por personagens que possam ser problem\u00e1ticos,<\/li>\n<li>Substitua-os por uma string vazia,<\/li>\n<li>Retorne as informa\u00e7\u00f5es atualizadas ao WordPress para serializa\u00e7\u00e3o.<\/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\">Aqui est\u00e1 um exemplo<\/a><\/strong> que procura remover v\u00e1rios s\u00edmbolos, como s\u00edmbolos de direitos autorais, s\u00edmbolos de marca registrada, s\u00edmbolos de registro e outras variantes dos mesmos, tanto em formatos codificados quanto em equivalentes codificados:<\/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>Observe que a fun\u00e7\u00e3o aceita os dados da postagem como um argumento, verifica se voc\u00ea n\u00e3o est\u00e1 trabalhando com um rascunho, um artigo pendente ou um rascunho autom\u00e1tico e, em seguida, remove o conte\u00fado do nome da postagem por<\/p>\n<p>Esta pode ser uma quest\u00e3o sutil. Ou seja, talvez voc\u00ea n\u00e3o a encontre em seus esfor\u00e7os de desenvolvimento. Se, por outro lado, voc\u00ea fizer isso, isso fornece uma solu\u00e7\u00e3o que n\u00e3o apenas permite remover determinados caracteres da URL, mas tamb\u00e9m permite que voc\u00ea fa\u00e7a isso de forma escal\u00e1vel.<\/p>\n<p>Assim, conforme suas necessidades mudam, voc\u00ea pode simplesmente atualizar a chamada <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> com os caracteres que voc\u00ea precisa remover do seu URL.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Uma solu\u00e7\u00e3o para remover caracteres problem\u00e1ticos dos links permanentes do WordPress e de maneira escal\u00e1vel.<\/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":[898,837,920,846,867],"tags":[1170],"class_list":["post-230450","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-guia-para-iniciantes","category-outro","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/230450","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=230450"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/230450\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/164255"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=230450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=230450"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=230450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}