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.
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.
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 .
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:
static public function 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_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ą.
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
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.
W rzeczywistości, jeśli spojrzysz na podstawową funkcję wp_insert_post (post.php), zobaczysz, że wykonuje ona następujące czynności:
$data['post_name'] = wp_unique_post_slug( sanitize_title( $data['post_title'], $post_ID ), $post_ID, $data['post_status'], $post_type, $post_parent );
$wpdb->update( $wpdb->posts, array( 'post_name' => $data['post_name'] ), $where );
Najważniejszą rzeczą do odnotowania jest to, że używa zarówno wp_unique_post_slug, jak i sanitize_title:
wp_unique_post_slug( sanitize_title(
Wybacz, że wznowiłem stare pytanie, ale miałem taką samą konieczność, jak się okazało, ta metoda działa dla mnie idealnie:
$some_string = "DON'T STOP ME NOW!";
$slug = sanitize_title(sanitize_title($some_string, '', 'save'), '', 'query');
echo $slug; // dont-stop-me-now
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! :)