{"id":229741,"date":"2022-11-26T19:28:00","date_gmt":"2022-11-26T16:28:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229741"},"modified":"2022-11-09T16:10:51","modified_gmt":"2022-11-09T13:10:51","slug":"jak-usunac-znaki-specjalne-z-permalinkow","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/jak-usunac-znaki-specjalne-z-permalinkow\/","title":{"rendered":"Jak usun\u0105\u0107 znaki specjalne z permalink\u00f3w?"},"content":{"rendered":"\n<p>Za ka\u017cdym razem, gdy pracujesz z WordPressem i interfejsami API innych firm, zawsze istnieje ryzyko, \u017ce napotkasz problemy, w kt\u00f3rych interfejs API innej firmy nie jest przygotowany do obs\u0142ugi niekt\u00f3rych znak\u00f3w, kt\u00f3re istniej\u0105 w permalinku.<\/p>\n<p>Jednak w zale\u017cno\u015bci od ustawie\u0144 linku bezpo\u015bredniego mo\u017ce to by\u0107 problem, ale nie musi. Na przyk\u0142ad mo\u017cesz mie\u0107 swoje permalinki ustawione na co\u015b w rodzaju <strong>?p=123<\/strong> dla ka\u017cdego posta. W takim przypadku to nie jest du\u017cy problem.<\/p>\n<p>Ale je\u015bli u\u017cywasz \u201e\u0142adnych permalink\u00f3w&quot;, a Tw\u00f3j permalink zawiera co\u015b w rodzaju symbolu znaku towarowego lub symbolu praw autorskich, mo\u017ce to powodowa\u0107 problemy, gdy komunikujesz si\u0119 z wymienionym interfejsem API innej firmy.<\/p>\n<p>Po pierwsze, je\u015bli u\u017cywasz \u0142adnych permalink\u00f3w, s\u0105 one zazwyczaj tworzone na podstawie tytu\u0142u posta. Wi\u0119c je\u015bli u\u017cyjesz czego\u015b takiego jak All About The Acme Machine\u2122, wygeneruje permalink, kt\u00f3ry zawiera co\u015b takiego.<\/p>\n<p>Na przyk\u0142ad mo\u017cesz mie\u0107 WordPress automatycznie generowa\u0107 co\u015b takiego: <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>A kiedy nadejdzie czas, aby wys\u0142a\u0107 te informacje do zewn\u0119trznego interfejsu API (lub spr\u00f3bowa\u0107 przetworzy\u0107 je za pomoc\u0105 czegokolwiek, co nie jest przygotowane na takie znaki), wtedy wpadniesz w k\u0142opoty.<\/p>\n<p>Na szcz\u0119\u015bcie WordPress zapewnia hak, kt\u00f3ry pozwala nam przetwarza\u0107 permalinki, zanim zostan\u0105 zserializowane do bazy danych. Mianowicie jest to hak <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>A w tym przypadku dzia\u0142a to tak:<\/p>\n<ol>\n<li>Skonfiguruj podpi\u0119cie do uruchomienia na p\u00f3\u017anym etapie procesu serializacji,<\/li>\n<li>Szukaj postaci, kt\u00f3re mog\u0105 sprawia\u0107 problemy,<\/li>\n<li>Zast\u0105p je pustym ci\u0105giem,<\/li>\n<li>Zwr\u00f3\u0107 zaktualizowane informacje do WordPress w celu serializacji.<\/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\">Oto przyk\u0142ad<\/a><\/strong>, kt\u00f3ry ma na celu usuni\u0119cie r\u00f3\u017cnych symboli, takich jak symbole praw autorskich, symbole znak\u00f3w towarowych, symbole rejestracji i inne ich warianty zar\u00f3wno w zakodowanych formatach, jak i zakodowanych odpowiednikach:<\/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>Zauwa\u017c, \u017ce funkcja akceptuje dane posta jako argument, sprawdza, czy nie pracujesz z wersj\u0105 robocz\u0105, oczekuj\u0105cym artyku\u0142em lub automatyczn\u0105 wersj\u0105 robocz\u0105, a nast\u0119pnie usuwa tre\u015b\u0107 w nazwie posta przez<\/p>\n<p>To mo\u017ce by\u0107 drobiazgowy problem. Oznacza to, \u017ce by\u0107 mo\u017ce nie spotkasz go w swoich wysi\u0142kach rozwojowych. Z drugiej strony, je\u015bli tak, to zapewnia to rozwi\u0105zanie, kt\u00f3re nie tylko pozwala usun\u0105\u0107 okre\u015blone znaki z adresu URL, ale tak\u017ce pozwala to zrobi\u0107 w skalowalny spos\u00f3b.<\/p>\n<p>Tak wi\u0119c, gdy zmieni\u0105 si\u0119 Twoje potrzeby, mo\u017cesz po prostu zaktualizowa\u0107 wywo\u0142anie <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> o znaki, kt\u00f3re musisz usun\u0105\u0107 z adresu URL.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Rozwi\u0105zanie polegaj\u0105ce na usuwaniu problematycznych znak\u00f3w z permalink\u00f3w WordPress i w spos\u00f3b skalowalny.<\/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":[919,897,836,845,866],"tags":[1169],"class_list":["post-229741","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-inny","category-kod","category-przewodnik-dla-poczatkujacych","category-samouczki","category-wordpress-7","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229741","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=229741"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229741\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/164255"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=229741"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=229741"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=229741"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}