Budowanie niestandardowych adresów URL w WordPress: Permalinks, Query Vars i przepisywanie adresów URL

API Rewrite dla WordPress jest ważną funkcją, o której prawdopodobnie nie czytasz zbyt wiele, ale bez wątpienia używasz, nawet nie zdając sobie z tego sprawy. API zapewnia funkcjonalność tworzenia własnych unikalnych linków-permalinks – dla Twojej witryny.

W tym samouczku wyjaśnię permalinks dogłębnie-czym są, dlaczego są trwałe, ich możliwe struktury i jak można je przepisać w formie zrozumiałej zarówno dla ludzi, jak i maszyn. Wyjaśnię również kilka kluczowych pojęć stojących za permalinks w WordPress, najpierw patrząc na to, jak dodawać zmienne do nieoptymalizowanych adresów URL i jak używać tych zmiennych i ich wartości do odpytywania bazy danych. Później zbadamy przepisywanie adresów URL i jak zbudować najlepszą strukturę dla pretty permalinks.

Co omówimy w tym artykule:

Czym Są Permalinks? Co to jest przepisywanie adresów URL?

Adresy URL są narzędziem służącym do wysyłania żądań HTTP GET przez Internet. Dokładniej, metoda GET przesyła pary key=value w adresie URL, aby uzyskać odpowiedź z określonego zasobu (przeczytaj więcej na ten temat na W3Schools).

Weź następujący adres URL:

http://example.com/?p=123

Znak zapytania dzieli ten adres URL na dwie części. Pierwsza część to nazwa domeny, druga część to łańcuch zapytań, który jest zbiorem zmiennych zapytania i wartości określających zasób żądany przez użytkownika. Łańcuch zapytania identyfikuje zasób, ale nie mówi nam nic o jego zawartości. Można powiedzieć, że nie ma znaczenia semantycznego dla ludzi i maszyn.

Dzięki API Rewrite możemy tłumaczyć nie semantyczne adresy URL na ich semantyczny odpowiednik za pomocą operacji przepisywania adresów URL. Reguła przepisywania przetłumaczyłaby poprzedni adres URL na następującą strukturę:

http://example.com/category/post-title/

Dzięki kategorii i tytułowi postu w adresie URL struktura ta dokładniej opisuje zawartość zasobów zarówno dla ludzi, jak i wyszukiwarek, co skutkuje użytecznym, dostępnym i przyjaznym dla SEO adresem URL. Można go zakładać, udostępniać i przechowywać na wiele sposobów i nigdy nie powinno się zmieniać w dłuższej perspektywie, aby połączony zasób mógł być na stałe ukierunkowany. Dlatego nazywamy je permalinks.

Adresy URL w WordPress: zapytania Vars i ciągi zapytań

Możemy poprosić WordPressa o pobranie prawie wszystkiego z bazy danych witryny. Zazwyczaj wyszukujesz posty w określonej kategorii lub oznaczone precyzyjnym tagiem lub opublikowane w określonym czasie. Gdy użytkownik przesyła adres URL, WordPress automatycznie obsługuje żądanie i, zgodnie z regułami hierarchii szablonów, pokazuje wyniki na jednej stronie lub w archiwum.

W pierwszej części tego postu pokażę Ci, jak korzystać z wbudowanych zmiennych ciągu zapytań i jak zarejestrować własne zmienne niestandardowe, poinstruujemy WordPress, aby pobrać te zmienne z adresów URL i użyć ich do odpytywania bazy danych, a następnie wyprowadzimy wynikową listę postów na niestandardową stronę archiwum.

W ostatniej części tego postu pokażę Ci narzędzia, które zapewnia nam WordPress, aby przetłumaczyć te semantycznie niezrozumiałe ciągi zapytań na znaczące, dostępne, użyteczne i zoptymalizowane pod kątem SEO permalinks. Dam ci również przegląd domyślnych i niestandardowych struktur permalink dostarczonych przez WordPress, i wreszcie będziemy budować niestandardowe dość permalinks nasAPI Rewrite.

Zapytania publiczne i prywatne Vars

Kwerendy vars to klucze, które definiują każde zapytanie SQL WordPress działa przeciwko bazie danych. Zmienne te dzielą się na dwie główne kategorie, w zależności od sposobu, w jaki możemy z nich korzystać. Prywatne kwerendy var można ustawić tylko w skrypcie, podczas gdy publiczne kwerendy Vars mogą być wysyłane do WordPress z ciągiem kwerend.

Oprócz zmiennych publicznych i prywatnych, WordPress pozwala nam rejestrować własne niestandardowe kwerendy var.

W adresie URL zmienne zapytania publicznego są kluczami znajdującymi się za znakiem zapytania (ciągiem zapytania) i są widoczne, gdy nie włączyliśmy opcji Pretty permalinks na stronie Ustawienia → Permalinks admin. Poniższy adres URL jest przykładem:

example.com/?author_name=carlodaniele

author_name jest publicznym zapytaniem var informującym WordPressa, że użytkownik szuka wszystkich postów użytkownika carlodaniele. Możemy dodać kilka zmiennych zapytań publicznych do ciągu zapytań, tak jak to robimy w następującym adresie URL:

example.com/?author_name=carlodaniele&tag=toolbar

Teraz WordPress otrzyma wszystkie posty użytkownika carlodaniele i otagowane jako toolbar. I możemy zrobić jeszcze więcej. Następny ciąg zapytania jest kombinacją niestandardowego typu post i taxonomy-name=taxonomy-term para.

example.com/?post_type=food&food-family=greens

W przeciwieństwie do zmiennych publicznych, zmienne zapytań prywatnych mogą być używane tylko w skrypcie. Z tego powodu nie będę ich eksplorował w tym poście (możesz przeczytać więcej w Kodeksie WordPress). Tutaj po prostu zaznaczę, że poniższy URL nie da nam oczekiwanego rezultatu:

example.com/?author__in=2, 4, 6

Tutaj autor _ _ in jest prywatnym zapytaniem var, a WordPress nie wyświetli postów określonych autorów.

Większość razy, dzięki Public query vars, nie musimy pisać kodu do zarządzania żądaniami użytkownika, wystarczy zbudować odpowiednie ciągi zapytań, a WordPress zrobi resztę.

Teraz zapoznaj się z poniższą listą publicznych var:

Możemy pobierać posty według typu, autora, kategorii, tagu, taksonomii, roku, miesiąca, dnia i tak dalej. Mamy zapytanie var dla prawie każdego rodzaju zapytania. Brakuje tu jednak możliwości budowania zapytań w oparciu o niestandardowe pola (nazywamy je zapytaniami meta). W rzeczywistości WordPress zapewnia zmienne zapytań meta_key i meta_value, ale należą one do prywatnej grupy zmiennych, więc nie są dostępne dla żądań URL i powinny być używane tylko w skryptach. Jak więc możemy prosić o zapytania meta z ciągów zapytań URL?

Pierwszym krokiem jest zarejestrowanie nowych zmiennych zapytań.

Zapytania Niestandardowe Vars

Po zarejestrowaniu zmienne te mogą mieć miejsce w łańcuchu zapytań, tak jak każda inna zmienna zapytania publicznego. Poniższa funkcja pokazuje nam, jak dodać je do listy:

Filtr query_vars pozwala nam dodawać, usuwać lub edytować istniejące zmienne przed uruchomieniem zapytania. Tutaj właśnie dodaliśmy dwie zmienne niestandardowe i od teraz możemy uzyskać ich wartości dzięki funkcji get_query_var() :

Teraz wartości zapytania var są dostępne do zbudowania niestandardowego zapytania.

Klasa WP_Query

Gdy użytkownik prosi o określony zasób, będący pojedynczą stroną, wynikiem wyszukiwania lub listą postów, WordPress tworzy instancję nowego obiektu WP_Query, którego metody pozwalają nam manipulować rzeczywistym zapytaniem SQL przed jego wykonaniem.

Zakładam, że znasz klasę WP_Query. Jeśli nie, przed przeczytaniem tego posta poświęć trochę czasu, aby sprawdzić nasz dogłębny Przewodnik po podboju WP_Query.

Zapytania Niestandardowe (Meta)

Mamy kilka parametrów, które pozwalają nam ustawić niestandardowe Zapytanie o pola, takie jak argument meta_query, który jest wielowymiarową tablicą pojedynczych zapytań meta z następującymi kluczami:

  • klucz (string)- niestandardowy klucz pola
  • wartość (string / array)- niestandardowa wartość pola
  • Typ (string)- niestandardowy typ pola
  • porównaj (string)- operator porównawczy

Jako przykład możemy ustawić następujący argument meta_query:

‘relation’ jest opcjonalnym elementem ustawiającym logiczną relację pomiędzy pojedynczymi zapytaniami (domyślnie ‘AND’).

Poza pętlą WordPress (tj. w pliku wtyczki) możemy przekazać tablicę do ustawionej metody obiektu $query w następujący sposób:

Metoda set zachowuje dwa argumenty: nazwę zmiennej zapytania oraz jej wartość.

Aby wpłynąć na zapytanie, zmienilibyśmy je po utworzeniu zapytania, ale przed jego wykonaniem. Aby wykonać to zadanie, podłączymy funkcję zwrotną do akcji pre_get_posts.

Poniższy przykład pokazuje, jak to wszystko działa:

Należy pamiętać, że obiekt $ query jest przekazywany do funkcji przez odniesienie, a nie przez wartość. Oznacza to, że wszelkie zmiany w obiekcie $query wpływają bezpośrednio na oryginalne zapytanie, a nie tylko na instancję zapytania. W związku z tym dobrą praktyką jest upewnienie się, że edytujemy tylko główne zapytanie (! $query->is_main_query ()), a zmiany nie wpływają na zapytania administratora (is_admin ()). W razie potrzeby, możemy sprawdzić inne warunki, aby mieć pewność, że główne zapytanie zostanie zmienione wyłącznie na określonych stronach (tj. is_post_type_archive ()).

Załóżmy teraz, że wszystko, o czym mówiliśmy do tej pory, to działający przykład.

Wyświetlanie postów według pól niestandardowych

Powiedz, że chcesz zbudować katalog książek za pomocą WordPress. W tym celu możesz zarejestrować niestandardowy typ postu o nazwie książka, dodając kilka niestandardowych pól, takich jak nazwa_autora, nazwa_autora, wydawca i tak dalej. I powiedz, że chcesz zapewnić użytkownikom Witryny linki do stron archiwalnych przez author_surname.

Teraz wiemy, co robić. Najpierw musimy zarejestrować zapytanie var nadając mu nazwę book-author:

Należy zauważyć, że niestandardowa zmienna zapytania została nazwana book-author, a nie author, co jest zarezerwowanym terminem dla autorów postów (Zobacz pełną listę zastrzeżonych terminów w Kodeksie). Teraz WordPress jest świadomy zapytania var i możemy uzyskać jego wartość z adresu URL dzięki funkcji get_query_var.

Rozważ teraz następującą funkcję podłączoną do pre_get_posts:

get_query_var() pobiera wartość ‘book-author’. Jeśli jest to możliwe, wartość ta jest wpychana do tablicy $meta_query.

Ustawiliśmy również wartość dla elementu ‘relation’, na wypadek gdybyśmy ustawili więcej niż jedno zapytanie meta.

Na koniec metoda set przekazuje tablicę parametrów do obiektu $query, zmieniając zapytanie przed jego wykonaniem.

Teraz możesz wysłać adres URL w następujący sposób:

http://example.com/?post_type=book&book-author=Rowling

I dostaniesz wszystkie książki w swoim archiwum, w którym jest pole autor_surname.

Z dobrym zrozumieniem obiektu WP_Query i zmiennych zapytań, możemy uzyskać wszystko z bazy danych, wysyłając tylko odpowiednie adresy URL. Nadszedł czas, aby przepisać te adresy URL do użytecznych, dostępnych i przyjaznych SEO struktur.

Pretty Permalinks

WordPress zapewnia trzy struktury permalink:

  • Brzydkie permalinki
  • Pretty permalinks</ li>
  • Pathinfo permalinks (index.PHP pojawia się w adresie URL)

Domyślnie WordPress używa brzydkiej struktury permalink. (tj. http://example.com/?post_type=book lub http://example.com/?p=123). Ale wiemy, jak ważna jest struktura Permalink (tj. http://example.com/book/harry-potter-and-the-chamber-of-secrets/), więc przejdź do Ustawienia > Permalinks admin strona instalacji i ustawić swoją ulubioną strukturę.

Możemy sprawdzić jedną z dostępnych opcji lub ustawić niestandardową strukturę, w której możemy podać jeden lub więcej tagów struktury. Te tagi są słowami kluczowymi, które możemy dodać do permalinków, aby nadać im konkretne znaczenie. Jako przykład, %year % poinformuje Użytkownika o roku publikacji postu.

WordPress zapewnia domyślne tagi struktury 10, ale możemy dodać dowolną liczbę niestandardowych tagów, po jednym dla każdej niestandardowej zmiennej zapytania, którą wcześniej zarejestrowaliśmy.

Custom permalink structure
Po włączeniu tej struktury nazwa postu zostanie poprzedzona rokiem publikacji.

Biorąc to pod uwagę, naszym ostatnim zadaniem jest zarejestrowanie niestandardowego tagu struktury i poinstruowanie WordPressa, jak z niego korzystać.

Dołączmy następującą funkcję do akcji init:

Funkcja add_rewrite_tag rejestruje nowy znacznik struktury. Funkcja przechowuje trzy argumenty: nazwę znacznika, Wyrażenie regularne pasujące do nazwy znacznika, opcjonalne zapytanie (nie ustawione tutaj).

Teraz WordPress jest świadomy tego tagu. Musimy tylko zarejestrować regułę przepisywania, która mówi WordPressowi, jak z niej korzystać. Oto kod:

Funkcja add_rewrite_rule () wykona tutaj magię:

  • Pierwszy argument jest wyrażeniem regularnym dopasowanym do żądanego adresu URL;
  • Drugim argumentem jest adres URL do pobrania, gdy regex jest dopasowany; oraz
  • Ostatnim argumentem jest łańcuch, którego wartością może być ‘ top ‘ lub ‘ bottom ‘(‘top’ będzie miał pierwszeństwo przed istniejącymi regułami).

Zauważ, że kiedy rejestrujemy niestandardowy typ posta, musimy wywołać flush_rewrite_rules() przy aktywacji wtyczki, w przeciwnym razie nowe reguły przepisywania nie będą działać (Czytaj więcej w Kodeksie)

Teraz adres URL jak poniżej:

http://example.com/?post_type=book&book-author=Tolkien

byłoby przepisane w następujący dość permalink:

http://example.com/book/book-author/Tolkien/

Uwaga: zawsze zapisuj ustawienia Permalink podczas dodawania lub edycji przepisywania znaczników i reguł, nawet jeśli nie zmieniłeś struktury permalink, w przeciwnym razie znaczniki i reguły nie będą skuteczne.

Wtyczka Monitora Zapytań

Doskonałym narzędziem programistycznym do sprawdzania zapytań vars jest darmowa wtyczka o nazwie Query Monitor. Ta wtyczka pokazuje dopasowane reguły przepisywania i ciągi zapytań, zmienne zapytań, zapytania do bazy danych, Hooki i wiele więcej. Zdecydowanie warto zobaczyć.

Query Monitor
Monitor zapytań dodaje menu w pasku narzędzi WordPress

Wrapping Up

W tym poście przyjrzeliśmy się, jak odpytywać bazę danych WordPress, przekazując wartości z ciągów zapytań URL za pomocą publicznych i niestandardowych zmiennych zapytań. Zbadaliśmy również permalinks z naciskiem na niestandardowe struktury. Na koniec dodaliśmy nowe tagi i reguły przepisywania oraz zbudowaliśmy przyjazne dla użytkownika i SEO adresy URL.

Mam nadzieję, że ten samouczek okazał się pomocny i możesz teraz dostosować własną strukturę adresu URLture do własnych potrzeb.

Masz do czynienia z permalinks w WordPress? Podziel się swoimi doświadczeniami, przykładami i pytaniami w komentarzach poniżej.

Tagi: