Jak usunąć znaki specjalne z permalinków?
Za każdym razem, gdy pracujesz z WordPressem i interfejsami API innych firm, zawsze istnieje ryzyko, że napotkasz problemy, w których interfejs API innej firmy nie jest przygotowany do obsługi niektórych znaków, które istnieją w permalinku.
Jednak w zależności od ustawień linku bezpośredniego może to być problem, ale nie musi. Na przykład możesz mieć swoje permalinki ustawione na coś w rodzaju ?p=123 dla każdego posta. W takim przypadku to nie jest duży problem.
Ale jeśli używasz „ładnych permalinków", a Twój permalink zawiera coś w rodzaju symbolu znaku towarowego lub symbolu praw autorskich, może to powodować problemy, gdy komunikujesz się z wymienionym interfejsem API innej firmy.
Po pierwsze, jeśli używasz ładnych permalinków, są one zazwyczaj tworzone na podstawie tytułu posta. Więc jeśli użyjesz czegoś takiego jak All About The Acme Machine™, wygeneruje permalink, który zawiera coś takiego.
Na przykład możesz mieć WordPress automatycznie generować coś takiego: https://acme.com/all-about-the-acme®-machine/
A kiedy nadejdzie czas, aby wysłać te informacje do zewnętrznego interfejsu API (lub spróbować przetworzyć je za pomocą czegokolwiek, co nie jest przygotowane na takie znaki), wtedy wpadniesz w kłopoty.
Na szczęście WordPress zapewnia hak, który pozwala nam przetwarzać permalinki, zanim zostaną zserializowane do bazy danych. Mianowicie jest to hak wp_insert_post_data.
A w tym przypadku działa to tak:
- Skonfiguruj podpięcie do uruchomienia na późnym etapie procesu serializacji,
- Szukaj postaci, które mogą sprawiać problemy,
- Zastąp je pustym ciągiem,
- Zwróć zaktualizowane informacje do WordPress w celu serializacji.
Oto przykład, który ma na celu usunięcie różnych symboli, takich jak symbole praw autorskich, symbole znaków towarowych, symbole rejestracji i inne ich warianty zarówno w zakodowanych formatach, jak i zakodowanych odpowiednikach:
Zauważ, że funkcja akceptuje dane posta jako argument, sprawdza, czy nie pracujesz z wersją roboczą, oczekującym artykułem lub automatyczną wersją roboczą, a następnie usuwa treść w nazwie posta przez
To może być drobiazgowy problem. Oznacza to, że być może nie spotkasz go w swoich wysiłkach rozwojowych. Z drugiej strony, jeśli tak, to zapewnia to rozwiązanie, które nie tylko pozwala usunąć określone znaki z adresu URL, ale także pozwala to zrobić w skalowalny sposób.
Tak więc, gdy zmienią się Twoje potrzeby, możesz po prostu zaktualizować wywołanie preg_replace o znaki, które musisz usunąć z adresu URL.