Jak działa routing na wordpress?

13

Jak działa podstawowy routing wp? Trudno mi zrozumieć ... W MVC Twój adres URL wygląda jak mój mikrokontroler / myaction, który jest mapowany na MyController-> myaction ()

W drupal jest to index.php? Q = mycustomerpath / hello, które można zamapować na dowolną funkcję, która Ci się podoba, która zwraca treść „tematyczną” do układu motywu.

Ale w wp nie mam pojęcia, jak to się robi ... to? P = 1, a potem? Produkt = 1 ... Szukałem dokumentacji przepływu routingu, ale nie mogę jej znaleźć (Google zwraca tylko artykuły na temat niestandardowych trasy) .. chcę najpierw zrozumieć podstawy rutowania

Tak chłopie
źródło
kopiąc kod, widzę, że przy każdym żądaniu wywołuje post_pytania? dlaczego, u licha, za każdym razem musi sprawdzać posty? czy nie ma przypadków, w których tak naprawdę nie chcesz wyświetlać postów?
yeahman
1
Treści są zapisywane jako post w WP. Tak więc, gdy chcesz pokazać zawartość, musisz ją zapytać
Sisir
Chciałbym zasugerować, abyś przeczytał o „pętli”, którą musisz zrozumieć, aby wiedzieć, jak działa WordPress. Niezbędna „pętla” wyświetla tablicę postów, która jest wynikiem postów query_posts. W przypadku nieadministracyjnych żądań URL WP jest zaprojektowane tak, aby wyświetlało tylko posty, a programowanie wymaga pokazywania czegoś poza postem. Żądania adresu URL administratora są różne i nie używają „pętli” i nie wyświetlają żadnych wpisów.
ok, ale to podejście jest trochę dziwne i niezbyt elastyczne tbh
tak,
powiedz, że chcę wyświetlić formularz kontaktowy. Czy muszę wstawić mój HTML w typie zawartości strony? Nadal próbuję znaleźć miejsce na logikę przesyłania formularza ... (w temacie page.php? Bardzo brzydkie podejście)
yeahman

Odpowiedzi:

20

W WordPress adresy URL nie są mapowane na trasy. Odwzorowują na zapytania do bazy danych.

Kiedy używasz WordPress w „domyślnym” trybie bezpośredniego połączenia, masz zestaw zmiennych w głównym zapytaniu URL, takich jak? P = 1 lub? Page = 234 i tak dalej. Jest też? S = szukaj i wiele innych.

Jeśli używasz „ładnych” bezpośrednich linków, tworzony jest duży zestaw reguł zwanych „regułami przepisywania”, które bezpośrednio mapują różne wzorce adresów URL na ten sam zestaw parametrów adresów URL. Tak więc adres URL taki jak / 2014/04/12 / example będzie mapowany na? Rok = 2014 i miesiąc = 04 i dzień = 12 i nazwa postu = przykład lub podobny. Zatem po ich odwzorowaniu dotyczy to również tych.

Zmienne te zasadniczo kontrolują główną instancję klasy WP_Query. Klasa WP_Query przechowuje wszystkie informacje, które budują zapytanie do bazy danych, aby uzyskać „posty” z bazy danych. Różne przekazane do niego parametry kontrolują, jakie zapytanie tworzy i jakie dane otrzymuje.

Widzisz, wszystko, co może być wyświetlane przez WordPress, jest zasadniczo „postem”. Blog to seria postów w odwrotnym porządku czasowym. „Strona” jest statycznym postem o określonej nazwie. „Niestandardowy typ postu” jest dokładnie tak, jak to brzmi, „post” z niestandardowym typem, który zdefiniujesz. Wszystkie główne zapytania do wyświetlenia czegokolwiek w WordPress otrzymują pewien podzbiór postów z tabeli wp_posts.

To właśnie robi WP_Query. A parametry z adresu URL są wysyłane bezpośrednio do tego głównego zapytania i tam używane.

Następnie motyw określa szablon, którego należy użyć, na podstawie tego, z którego pochodzi zapytanie. Jeśli poprosiłeś / category / example, to staje się to? Nazwa_kategorii = przykład, co oznacza, że ​​główna tablica $ wp_query-> query_vars otrzyma tę informację, a WP_Query wyciągnie ostatnie X postów dla kategorii „przykład”, i to ustawi flagę is_category na true.

Program ładujący szablony uruchomi się po tym, zobaczy, że is_category () zwraca true, i zdecyduje się wybrać szablon kategorii, więc wyszuka kategorię example.php i wróci do kategorii.php itd., Zgodnie z szablonem Hierarchia.

Pytanie, czy chcesz zmienić sposób działania adresów URL, jest proste: czy chcesz zmienić adresy URL lub do czego są one mapowane? Ponieważ adresy URL nie są mapowane na funkcje, są one mapowane na parametry sterujące zapytaniem. Jeśli chcesz, aby adres URL dostosował to główne zapytanie, jest to nieco inny proces niż w przypadku, gdy chcesz, aby specjalny adres URL uruchamiał zupełnie inny specjalny kod.

Aby odpowiedzieć na konkretne pytanie w komentarzach: „czy nie ma przypadków, w których nie chcesz wyświetlać postów?” Nie, nie ma. Wszystko jest postem. Cała zawartość jest przechowywana w postach. Jeśli chcesz przechowywać treści gdzie indziej i być innym, możesz to zrobić, ale jest to trudniejsze, ponieważ, szczerze mówiąc, zwykle nie jest to konieczne. Jeśli masz specjalną treść, stwórz niestandardowy typ postu, przechowuj treść jako post z tym typem, zamapuj na niego wzorzec adresu URL. Łatwo.

Otto
źródło
Rozumiem, że wszystko powinno być reprezentowane w poście (poprzez niestandardowe typy postów itp.) Bardzo podobne do niestandardowych typów w Drupal 6 ... ale czy to wpływa na wydajność, mając tabelę pojedynczych postów do przechowywania każdej zawartości witryny? drupal 7 rozwiązał go, wprowadzając typ encji, dzięki czemu nie musisz tworzyć niestandardowego typu i przechowywać wszystkiego w tabeli węzłów, ale we własnej tabeli encji, która nadal może korzystać z frameworka drupal. Mam nadzieję, że wordpress wprowadzi takie podejście w przyszłości. dziękuję za szczegółowe wyjaśnienie.
tak,
Myślę, że jeśli chcę zmapować adres URL do własnej funkcji / motywu, router wp pomógłby?
yeahman
Dodanie pełnego systemu routingu zwykle nie jest konieczne. Istnieją prostsze sposoby. Podstawą WordPressa jest wyświetlanie treści generowanych przez użytkowników, które są przechowywane w tabeli postów. Jeśli chcesz wyświetlić zawartość, która nie jest generowana przez użytkownika, zazwyczaj robisz to w motywie lub we wtyczce. Istnieją setki (tysiące) haczyków akcji i filtrów oraz innych sposobów, aby kod zastępował różne części procesu podczas generowania strony. W przypadku skrótów wstawianie niestandardowego kodu HTML do zawartości jest stosunkowo łatwe.
Otto
Jak dodać niestandardowy HTML / PHP do utworzonego przeze mnie typu posta? bez modyfikowania single.php motywu lub utworzenia single-mycustompost.php (niezbyt przenośne podejście)
yeahman
7
po ponad roku pracy z wordpressem ... nadal mnie to nie przekonuje ... framework nie jest elegancki i dość brzydki ... Działa jak zwykły blog, ale jeśli chcesz tworzyć inne typy stron internetowych. To rodzaj hakerskiego wordpressa, aby zrobić coś, co nie było przeznaczone.
yeahman,