{"id":230058,"date":"2022-11-26T19:47:00","date_gmt":"2022-11-26T16:47:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230058"},"modified":"2022-11-09T19:54:08","modified_gmt":"2022-11-09T16:54:08","slug":"como-quitar-caracteres-especiales-de-los-enlaces-permanentes","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/como-quitar-caracteres-especiales-de-los-enlaces-permanentes\/","title":{"rendered":"C\u00f3mo quitar caracteres especiales de los enlaces permanentes"},"content":{"rendered":"\n<p>Siempre que trabaje con WordPress y API de terceros, siempre existe la posibilidad de que se encuentre con problemas en los que la API de terceros no est\u00e1 preparada para manejar ciertos caracteres que existen en un enlace permanente.<\/p>\n<p>Sin embargo, dependiendo de la configuraci\u00f3n del enlace permanente, esto puede o no ser un problema. Por ejemplo, puede establecer sus enlaces permanentes en algo como <strong>?p=123<\/strong> para cada publicaci\u00f3n. En ese caso, no es mucho problema.<\/p>\n<p>Pero si est\u00e1 utilizando &quot;enlaces permanentes bonitos&quot; y su enlace permanente incluye algo como un s\u00edmbolo de marca registrada o un s\u00edmbolo de derechos de autor, entonces puede causar problemas siempre que se comunique con dicha API de terceros.<\/p>\n<p>Primero, si est\u00e1 utilizando enlaces permanentes bonitos, estos generalmente se crean a partir del t\u00edtulo de la publicaci\u00f3n. Entonces, si usa algo como All About The Acme Machine\u2122, generar\u00e1 un enlace permanente que incluye algo as\u00ed.<\/p>\n<p>Por ejemplo, puede hacer que WordPress genere autom\u00e1ticamente algo como esto: <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>Y cuando llegue el momento de enviar esa informaci\u00f3n a una API de terceros (o de intentar procesarla usando algo que no est\u00e9 preparado para tales caracteres), entonces tendr\u00e1 problemas.<\/p>\n<p>Afortunadamente, WordPress proporciona un enlace que nos permite procesar los enlaces permanentes antes de que se serialicen en la base de datos. Es decir, este es el 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>Y en este caso, funciona as\u00ed:<\/p>\n<ol>\n<li>Configure el gancho para disparar tarde en el proceso de serializaci\u00f3n,<\/li>\n<li>Busque personajes que puedan ser problem\u00e1ticos,<\/li>\n<li>Reempl\u00e1celos con una cadena vac\u00eda,<\/li>\n<li>Devuelva la informaci\u00f3n actualizada a WordPress para su serializaci\u00f3n.<\/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\">Aqu\u00ed hay un ejemplo<\/a><\/strong> que busca eliminar varios s\u00edmbolos, como los s\u00edmbolos de derechos de autor, los s\u00edmbolos de marcas registradas, los s\u00edmbolos de registro y otras variantes de los mismos, tanto en formatos codificados como en los 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>Tenga en cuenta que la funci\u00f3n acepta los datos de la publicaci\u00f3n como argumento, verifica que no est\u00e9 trabajando con un borrador, un art\u00edculo pendiente o un borrador autom\u00e1tico, y luego elimina el contenido en el nombre de la publicaci\u00f3n.<\/p>\n<p>Esto puede ser un problema matizado. Es decir, quiz\u00e1s no lo encuentre en sus esfuerzos de desarrollo. Si, por el contrario, lo hace, entonces esto proporciona una soluci\u00f3n que no solo le permite eliminar ciertos caracteres de la URL, sino que tambi\u00e9n le permite hacerlo de forma escalable.<\/p>\n<p>Entonces, a medida que cambien sus necesidades, simplemente puede actualizar la llamada <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> con los caracteres que necesita eliminar de su URL.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una soluci\u00f3n para eliminar caracteres problem\u00e1ticos de los enlaces permanentes de WordPress y de forma escalable.<\/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":[892,831,914,840,861],"tags":[1172],"class_list":["post-230058","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-guia-para-principiantes","category-otro","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230058","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=230058"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/230058\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/164255"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=230058"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=230058"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=230058"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}