W jaki sposób WordPress generuje ślimaki adresów URL?
17
Czy jest gdzieś strona, która szczegółowo opisuje, w jaki sposób WordPress generuje ślimaki dla adresów URL? Piszę skrypt, który musi generować kopie adresów URL identyczne z tymi generowanymi przez WordPress.
Nie mogę powiedzieć, że nie mam strony / samouczka / dokumentacji na temat generowania ślimaków WP, ale spójrz na tę sanitize_title()funkcję.
Nie odbieraj złego wrażenia na podstawie nazwy funkcji, nie ma ona na celu odkażania tytułu do dalszego użycia jako tytułu strony / postu . Pobiera ciąg tytułu i zwraca go do użycia w adresie URL:
usuwa HTML i PHP
usuwa znaki specjalne
konwertuje wszystkie znaki na dolne czapki
zastępuje białe spacje, podkreślenia i kropki łącznikami / myślnikami
redukuje wiele kolejnych myślników do jednego
Nie może być przypadki brzegowe gdzie rdzeń robi coś dodatkowego (trzeba by szukać u źródła, aby upewnić się, że sanitize_title()będzie zawsze wystarczają na generowanie dokładnie to samo można się spodziewać), ale to powinno obejmować co najmniej 99%, jeśli nie wszystkie przypadki .
@kaiser: Doszedłem do wniosku, że po prostu zakochałeś się w przepisaniu T5 :) (co jest moim planem do sprawdzenia) | i ogólnie: jeśli tytuł jest naprawdę długi, WP przycina również ślimaki do pewnej maksymalnej długości. Jest to jeden z tych przypadków, w których nie jestem do końca pewien, czy robi to również sanitize_titlefiltr zastosowany w funkcji, czy też jest to obsługiwane przez coś innego po uruchomieniu funkcji.
Johannes Pille,
Myślę, że to sanitize_titlefiltr należy sprawdzić. Ale są też inne powiązane funkcje . Naprawdę nie mam o tym pojęcia. Czasami wydaje się SimplePieto łatwiejsze do zrozumienia niż WP_Rewriterzecz. Btw: Toscho pracuje nad zintegrowaniem funkcji „Monkeyman Rewrite Analyzer” ze swoją wtyczką. Właśnie tam rzeczy stają się naprawdę interesujące.
kaiser
1
Weź również pod uwagę sanitize_title_with_dash (), jeśli chcesz być bardziej precyzyjny w kwestii generowania ślimaka przyjaznego adresowi URL.
Tom Auger,
5
Możesz użyć tej funkcji:
staticpublicfunction slugify($text){// replace non letter or digits by -
$text = preg_replace('~[^\pL\d]+~u','-', $text);// transliterate
$text = iconv('utf-8','us-ascii//TRANSLIT', $text);// remove unwanted characters
$text = preg_replace('~[^-\w]+~','', $text);// trim
$text = trim($text,'-');// remove duplicate -
$text = preg_replace('~-+~','-', $text);// lowercase
$text = strtolower($text);if(empty($text)){return'n-a';}return $text;}
Dokładnie tak działa funkcja odkażania adresu URL ur.
Poza WordPress nie ma wbudowanego trybu programistyWP_DEBUG , co w tym przypadku nie pomaga. Zasadniczo WP używa „Rewrite API” , które jest opakowującą funkcje WP_Rewriteklasą niskiego poziomu , o której można przeczytać w Kodeksie . global $wp_rewriteObiekt stoi do Państwa dyspozycji, aby sprawdzić go lub interakcji z klasą.
Wtyczka „Monkeyman” dodaje nową stronę, umieszczoną w menu interfejsu administratora w menu Narzędzia . Wtyczka „T5 Rewrite” dodaje nową kartę pomocy do strony Ustawienia > Permalinks . Moje rozszerzenie dodaje także karty pomocy do wspomnianej strony Narzędzia .
Oto zrzut ekranu przedstawiający zawartość karty pomocy „T5 Rewrite”.
Wtyczka „T5 Rewrite” wykonuje wspaniałą pracę, pomagając w inspekcji obiektu przepisującego. I robi jeszcze więcej: dodaje nowe możliwości. Dlatego jest to (przynajmniej w moich instalacjach) część mojego podstawowego pakietu wtyczek.
Pierwszy wykorzystuje savetryb, w którym tagi HTML i PHP są usuwane, a akcenty są usuwane (znaki akcentowane są zastępowane nieakcentowanymi odpowiednikami).
Drugi querytryb zapewnia, że wszystkie spacje zostaną zastąpione myślnikami -i inne znaki interpunkcyjne zostaną usunięte.
Odpowiedzi:
Nie mogę powiedzieć, że nie mam strony / samouczka / dokumentacji na temat generowania ślimaków WP, ale spójrz na tę
sanitize_title()
funkcję.Nie odbieraj złego wrażenia na podstawie nazwy funkcji, nie ma ona na celu odkażania tytułu do dalszego użycia jako tytułu strony / postu . Pobiera ciąg tytułu i zwraca go do użycia w adresie URL:
Nie może być przypadki brzegowe gdzie rdzeń robi coś dodatkowego (trzeba by szukać u źródła, aby upewnić się, że
sanitize_title()
będzie zawsze wystarczają na generowanie dokładnie to samo można się spodziewać), ale to powinno obejmować co najmniej 99%, jeśli nie wszystkie przypadki .źródło
sanitize_title
filtr zastosowany w funkcji, czy też jest to obsługiwane przez coś innego po uruchomieniu funkcji.sanitize_title
filtr należy sprawdzić. Ale są też inne powiązane funkcje . Naprawdę nie mam o tym pojęcia. Czasami wydaje sięSimplePie
to łatwiejsze do zrozumienia niżWP_Rewrite
rzecz. Btw: Toscho pracuje nad zintegrowaniem funkcji „Monkeyman Rewrite Analyzer” ze swoją wtyczką. Właśnie tam rzeczy stają się naprawdę interesujące.Możesz użyć tej funkcji:
Dokładnie tak działa funkcja odkażania adresu URL ur.
źródło
Rdzeń do usług
Poza WordPress nie ma wbudowanego trybu programisty
WP_DEBUG
, co w tym przypadku nie pomaga. Zasadniczo WP używa „Rewrite API” , które jest opakowującą funkcjeWP_Rewrite
klasą niskiego poziomu , o której można przeczytać w Kodeksie .global $wp_rewrite
Obiekt stoi do Państwa dyspozycji, aby sprawdzić go lub interakcji z klasą.Wtyczki, które pomagają w tym zaglądać.
Toschos „T5 Rewrite” -Plugin i Jan Fabrys „Monkeyman Rewrite Analyzer” -Plugin poprowadzą Cię po Twojej drodze. Napisałem małe rozszerzenie do „T5 Rewrite”, aby bezproblemowo zintegrować je z „Monkeyman Rewrite Analyzer”, który można znaleźć w wiki repozytorium „T5 Rewrite” tutaj na GitHub .
Wtyczka „Monkeyman” dodaje nową stronę, umieszczoną w menu interfejsu administratora w menu Narzędzia . Wtyczka „T5 Rewrite” dodaje nową kartę pomocy do strony Ustawienia > Permalinks . Moje rozszerzenie dodaje także karty pomocy do wspomnianej strony Narzędzia .
Oto zrzut ekranu przedstawiający zawartość karty pomocy „T5 Rewrite”.
Vorlage = Wzór | Beschreibung = Objaśnienie | Beispiele = Przykłady
Notatki
Wtyczka „T5 Rewrite” wykonuje wspaniałą pracę, pomagając w inspekcji obiektu przepisującego. I robi jeszcze więcej: dodaje nowe możliwości. Dlatego jest to (przynajmniej w moich instalacjach) część mojego podstawowego pakietu wtyczek.
źródło
W rzeczywistości, jeśli spojrzysz na podstawową funkcję wp_insert_post (post.php), zobaczysz, że wykonuje ona następujące czynności:
Najważniejszą rzeczą do odnotowania jest to, że używa zarówno wp_unique_post_slug, jak i sanitize_title:
źródło
Wybacz, że wznowiłem stare pytanie, ale miałem taką samą konieczność, jak się okazało, ta metoda działa dla mnie idealnie:
Ta metoda wykorzystuje podwójne odkażanie.
Pierwszy wykorzystuje
save
tryb, w którym tagi HTML i PHP są usuwane, a akcenty są usuwane (znaki akcentowane są zastępowane nieakcentowanymi odpowiednikami).Drugi
query
tryb zapewnia, że wszystkie spacje zostaną zastąpione myślnikami-
i inne znaki interpunkcyjne zostaną usunięte.Mam nadzieję, że to komuś pomoże! :)
źródło