Próbuję rozpocząć add_rewrite_rule
pracę, aby wyodrębnić parametr z adresu URL i przekazać go do żądania. Widziałem wiele postów na ten temat, ale wydaje się, że nie działa.
Jeśli adres URL zaczyna się od określonego ciągu, chciałbym go usunąć z adresu URL i przekazać jako parametry zapytania.
Przykładowy adres URL żądania:
http://domain.com/foo/my_page
Zostałoby to przekształcone w
http://domain.com/my_page?param=foo
Jeśli „foo” nie jest obecne, powinno po prostu przejść przez normalne żądanie. Ta logika powinna mieć zastosowanie do dowolnego adresu URL strony lub adresu URL niestandardowego typu posta w mojej witrynie (w zasadzie foo / *). Myślenie, że działałoby to jak przejście, jeśli URL ma „foo”, usuń go, a następnie przekaż Wordpressowi do normalnej sytuacji.
Mam już parametr „param” jako dozwoloną zmienną query_vars.
W sumie musiałby działać dla następujących elementów:
- / foo / my_page (Strona)
- / foo / my_folder / my_page (podstrona)
- / foo / example_type (niestandardowe archiwum postów)
- / foo / example_type / example_post (niestandardowy pojedynczy post)
źródło
page
typ postu lub po prostu dowolna strona? co ze stronami nadrzędnymi / podrzędnymi w hierarchii?Odpowiedzi:
Podstawowa zasada, która działałaby w twoim przykładzie:
Pobiera to, co nastąpi później
foo/
i ustawia to jakpagename
dla zapytania, a następnieparam
otrzymuje wartość statycznąfoo
. Jeśli potrzebujesz różnych wzorców adresów URL, będziesz potrzebować dodatkowych reguł dla każdego unikalnego wzorca. Zapoznaj się zWP_Query
dokumentacją różnych zmiennych zapytań, które można ustawić w ramach reguł przepisywania. Nie zapomnij opróżnić reguł przepisywania po dodaniu nowych. Można to zrobić, odwiedzając stronę Ustawienia Permalinks.Teraz odwiedzasz przykładowy adres URL:
załaduje prawidłową stronę, ale nie będzie się zachowywać dokładnie tak jak odwiedzanie:
ponieważ podczas korzystania z wewnętrznych przepisywania
param
jest ustawiane w$wp_query
obiekcie zapytania, a nie w$_GET
superglobie. Jeśli chcesz pracować z kodem, który szuka wartości$_GET
, potrzebujesz dodatkowego kroku, aby ustawić tę wartość:Inną metodą, którą należy wziąć pod uwagę, jest użycie punktów końcowych, więc
/foo/
byłoby to na końcu adresów URL, a nie jako przedrostek. Zaletą tego jest to, że interfejs APIadd_rewrite_endpoint
upraszcza dodawanie wszystkich potrzebnych reguł, w tym włączanie stronicowania.źródło
Ok, dostałem przykłady działania dla wszystkich 3 typów żądań. Wymagało to mnóstwa eksperymentów i bałaganu, aby je uruchomić. Myślę, że Milo jest dobry w zachęcaniu ludzi do odpowiadania na ich własne pytania.
Po niezliczonych zmianach i odświeżeniu permalinków zdałem sobie sprawę, że o wiele łatwiej jest rozgryźć adresy URL poza add_rewrite_url i kiedy już zadziałały, zdefiniuj przepisywanie. Przykładem jest
index.php?param=foo&post_type=example_type
.Kolejna oczywista rzecz, ale dodanie jej tutaj, aby mogło pomóc komuś innemu. Musisz zdefiniować niestandardowy typ postu reguły add_rewrite_rule PRZED zdefiniowaniem reguł wieloznacznych strony / podstrony. Zmarnowałem trochę czasu z tym i myślę, że to główna rzecz sprawiła, że nie zrozumiałem, dlaczego reguły nie zadziałały.
Oto 3 zasady, które działają we wszystkich moich potrzebach. Reguła strona / podstrona została połączona w jedną.
Dodatkowo skonfigurowałem pętlę, aby dodać wiele niestandardowych reguł typów postów. Pamiętaj, że musisz zdefiniować niestandardowy typ postu reguły add_rewrite_rule PRZED zdefiniowaniem reguł wieloznacznych strony / podstrony.
Przepisz Analyzer , które przeszły wzdłuż Milo było bardzo pomocne, gdy próbuje lepiej zrozumieć, jak Wordpress zapytań do stron / stanowisk.
źródło