odczarowujemy wp rewrite · add rewrite endpoint() add feed() krzysiek dróżd ż...
TRANSCRIPT
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Odczarowujemy WP Rewrite
Krzysiek Dróżdż[email protected]
WPmagus.pl
Wrocław, 27 czerwca 2013
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Dowiedzmy się, co wiemyCzego dowiemy się z CodexuCzego dowiemy się z kodu WPPrzydatne przy debuggowaniu
Kto z Was. . . ?
. . . słyszał?
. . . korzystał?
. . . miał problemy?
. . . używa często?
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Dowiedzmy się, co wiemyCzego dowiemy się z CodexuCzego dowiemy się z kodu WPPrzydatne przy debuggowaniu
Kto z Was. . . ?
. . . słyszał?
. . . korzystał?
. . . miał problemy?
. . . używa często?
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Dowiedzmy się, co wiemyCzego dowiemy się z CodexuCzego dowiemy się z kodu WPPrzydatne przy debuggowaniu
Kto z Was. . . ?
. . . słyszał?
. . . korzystał?
. . . miał problemy?
. . . używa często?
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Dowiedzmy się, co wiemyCzego dowiemy się z CodexuCzego dowiemy się z kodu WPPrzydatne przy debuggowaniu
Kto z Was. . . ?
. . . słyszał?
. . . korzystał?
. . . miał problemy?
. . . używa często?
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Dowiedzmy się, co wiemyCzego dowiemy się z CodexuCzego dowiemy się z kodu WPPrzydatne przy debuggowaniu
Kto z Was. . . ?
. . . słyszał?
. . . korzystał?
. . . miał problemy?
. . . używa często?
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Dowiedzmy się, co wiemyCzego dowiemy się z CodexuCzego dowiemy się z kodu WPPrzydatne przy debuggowaniu
Czym jest WP Rewrite
WP Rewrite:
to klasa WordPressa
odpowiada za obsługę przyjaznych linków
przechowuje ustawienia w bazie
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Dowiedzmy się, co wiemyCzego dowiemy się z CodexuCzego dowiemy się z kodu WPPrzydatne przy debuggowaniu
Funkcje związane z WP Rewrite
add rewrite rule()
flush rewrite rules()
add rewrite tag()
add permastruct()
add rewrite endpoint()
add feed()
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Dowiedzmy się, co wiemyCzego dowiemy się z CodexuCzego dowiemy się z kodu WPPrzydatne przy debuggowaniu
add rewrite rule()
Pozwala dodać własne reguły.
Za pomocą wyrażeń regularnych definiujemy, jak sparsowaćprzyjazny link i na jego podstawie wyliczyć parametry requestu.
Przykład
Sprawi, że obsługiwane zaczną być adresystrona.pl/nutrition/milkshakes/vanilla. Takie requestybędą przekierowane na stronę o ID=12.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Dowiedzmy się, co wiemyCzego dowiemy się z CodexuCzego dowiemy się z kodu WPPrzydatne przy debuggowaniu
flush rewrite rules()
Służy do odświeżania rewrite rulesów
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Dowiedzmy się, co wiemyCzego dowiemy się z CodexuCzego dowiemy się z kodu WPPrzydatne przy debuggowaniu
Jak to się układa w czasie?
do action(plugins loaded)
utworzenie globalnej zmiennej wp rewrite
do action(setup theme)
do action(after setup theme)
do action(init)
do action(wp loaded)
parsowanie requestu
wysłanie nagłówków
wykonanie głównego WP Query
do action ref array(wp)
apply filters(template include)
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Dowiedzmy się, co wiemyCzego dowiemy się z CodexuCzego dowiemy się z kodu WPPrzydatne przy debuggowaniu
Kilka faktów o rewrite rulesach
są generowane na podstawie permastructów i endpointów
są cache’owane i zapamiętywane w bazie(opcja rewrite rules)
są wyrażeniami regularnymi
odpowiadają za parsowanie requestu i wyliczenierewrite tagów
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Dowiedzmy się, co wiemyCzego dowiemy się z CodexuCzego dowiemy się z kodu WPPrzydatne przy debuggowaniu
Wyświetl wszystkie reguły
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Dowiedzmy się, co wiemyCzego dowiemy się z CodexuCzego dowiemy się z kodu WPPrzydatne przy debuggowaniu
Wyświetl użytą/dopasowaną regułę
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Zdarzyło się każdemu. . . ?
Tworzymy własny typ wpisu za pomocą zgodnie z przykłademz Codex
Dodajemy wpis, publikujemy i chcemy go zobaczyć (lubodwiedzamy stronę archiwum tego typu wpisu)
Widzimy 404
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Co się wtedy zazwyczaj robi?
Szuka w Google
Trafia na informację, że trzeba sflushować rewrite rulesy
. . . i że wystarczy w tym celu zapisać ustawieniabezpośrednich odnośników
Ale to niezbyt dobre rozwiązanie!
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Co się wtedy zazwyczaj robi?
Szuka w Google
Trafia na informację, że trzeba sflushować rewrite rulesy
. . . i że wystarczy w tym celu zapisać ustawieniabezpośrednich odnośników
Ale to niezbyt dobre rozwiązanie!
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Z czego wynika problem?
Rejestracja CPT powoduje utworzenie nowego permastructa
. . . Ale nie generuje rewrite rulesów
Zatem WordPress nie rozpoznaje tego formatu adresu URL
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Z czego wynika problem?
Rejestracja CPT powoduje utworzenie nowego permastructa
. . . Ale nie generuje rewrite rulesów
Zatem WordPress nie rozpoznaje tego formatu adresu URL
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Co zatem zrobić?
Sflushować rewrite rulesy ;)
czyli wywołać funkcję flush rewrite rules
Zatem dodajemy wywołanie tej funkcji zaraz pod kodemrejestrującym CPT i wszystko zaczyna działać.
I tak się zazwyczaj kończy. . .
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Co zatem zrobić?
Sflushować rewrite rulesy ;)
czyli wywołać funkcję flush rewrite rules
Zatem dodajemy wywołanie tej funkcji zaraz pod kodemrejestrującym CPT i wszystko zaczyna działać.
I tak się zazwyczaj kończy. . .
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Co zatem zrobić?
Sflushować rewrite rulesy ;)
czyli wywołać funkcję flush rewrite rules
Zatem dodajemy wywołanie tej funkcji zaraz pod kodemrejestrującym CPT i wszystko zaczyna działać.
I tak się zazwyczaj kończy. . .
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Jak zatem zrobić to poprawnie?
WordPress nie robi tego automatycznie po dodaniupermastructa, bo. . .
wygenerowanie rewrite rulesów jest czasochłonne
i powoduje zapis do bazy danych
Czyli nie chcemy tego robić podczas każdej odsłony strony.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Jak zatem zrobić to poprawnie?
WordPress nie robi tego automatycznie po dodaniupermastructa, bo. . .
wygenerowanie rewrite rulesów jest czasochłonne
i powoduje zapis do bazy danych
Czyli nie chcemy tego robić podczas każdej odsłony strony.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Jak zatem zrobić to poprawnie?
WordPress nie robi tego automatycznie po dodaniupermastructa, bo. . .
wygenerowanie rewrite rulesów jest czasochłonne
i powoduje zapis do bazy danych
Czyli nie chcemy tego robić podczas każdej odsłony strony.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
To co teraz?
Musimy wywołać flush rewrite rules w odpowienim momenciei tylko raz (wtedy, gdy coś zmieniamy).
w motywie wykorzystajmy after switch theme
we wtyczce - activation hook i deactivation hook
To wystarczy w większości wypadków.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
To co teraz?
Musimy wywołać flush rewrite rules w odpowienim momenciei tylko raz (wtedy, gdy coś zmieniamy).
w motywie wykorzystajmy after switch theme
we wtyczce - activation hook i deactivation hook
To wystarczy w większości wypadków.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Kto pierwszy ten lepszy
Jeśli Twoja reguła powinna zostać dopasowana do adresu strony,ale tak nie jest, to pamiętaj, że reguły dopasowywane są po kolei.Możliwe, że jakaś reguła, która jest wyżej od Twojej, została jużdopasowana.
Tutaj przydają się funkcje, które wcześniej pokazałem.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Kto pierwszy ten lepszy
Jeśli Twoja reguła powinna zostać dopasowana do adresu strony,ale tak nie jest, to pamiętaj, że reguły dopasowywane są po kolei.Możliwe, że jakaś reguła, która jest wyżej od Twojej, została jużdopasowana.
Tutaj przydają się funkcje, które wcześniej pokazałem.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Trochę nieszkodliwego zamieszania
Dlaczego działają:strona.pl/testowa-strona i strona.pl/TeStoWa-StrONaorazstrona.pl/category/testowa-kategoria istrona.pl/category/tEsTOwA-kAteGoRiA a nie działają:strona.pl/Feed i strona.pl/Category?
Bo:Rewrite rulesy są dopasowywane za pomocą wyrażeńregularnych, które zwracają uwagę na rozmiar znaków. Jednakbardzo często rewrite tagi nie są specjalnie walidowane iprzyjmują także wielkie litery.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Trochę nieszkodliwego zamieszania
Dlaczego działają:strona.pl/testowa-strona i strona.pl/TeStoWa-StrONaorazstrona.pl/category/testowa-kategoria istrona.pl/category/tEsTOwA-kAteGoRiA a nie działają:strona.pl/Feed i strona.pl/Category?
Bo:Rewrite rulesy są dopasowywane za pomocą wyrażeńregularnych, które zwracają uwagę na rozmiar znaków. Jednakbardzo często rewrite tagi nie są specjalnie walidowane iprzyjmują także wielkie litery.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Na przykład zmieniamy strukturę URLi kategorii
Czyli mamy:strona.pl/category/ciekawe,a chcemy mieć:strona.pl/blog/ciekawe
Pytamy się na forum lub FB jak to zrobić
i otrzymujemy odpowiedź, że wystarczy dodać regułęmod rewrite do pliku .htaccess
Dodajemy. Sprawdzamy, że nowy format URL działa izadowoleni zamykamy temat
Ale to nie jest rozwiązanie, bo np. funkcja get category linknadal będzie generować standardowe URLe.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Na przykład zmieniamy strukturę URLi kategorii
Czyli mamy:strona.pl/category/ciekawe,a chcemy mieć:strona.pl/blog/ciekawe
Pytamy się na forum lub FB jak to zrobić
i otrzymujemy odpowiedź, że wystarczy dodać regułęmod rewrite do pliku .htaccess
Dodajemy. Sprawdzamy, że nowy format URL działa izadowoleni zamykamy temat
Ale to nie jest rozwiązanie, bo np. funkcja get category linknadal będzie generować standardowe URLe.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Na przykład zmieniamy strukturę URLi kategorii
Czyli mamy:strona.pl/category/ciekawe,a chcemy mieć:strona.pl/blog/ciekawe
Pytamy się na forum lub FB jak to zrobić
i otrzymujemy odpowiedź, że wystarczy dodać regułęmod rewrite do pliku .htaccess
Dodajemy. Sprawdzamy, że nowy format URL działa izadowoleni zamykamy temat
Ale to nie jest rozwiązanie, bo np. funkcja get category linknadal będzie generować standardowe URLe.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Na przykład zmieniamy strukturę URLi kategorii
Czyli mamy:strona.pl/category/ciekawe,a chcemy mieć:strona.pl/blog/ciekawe
Pytamy się na forum lub FB jak to zrobić
i otrzymujemy odpowiedź, że wystarczy dodać regułęmod rewrite do pliku .htaccess
Dodajemy. Sprawdzamy, że nowy format URL działa izadowoleni zamykamy temat
Ale to nie jest rozwiązanie
, bo np. funkcja get category linknadal będzie generować standardowe URLe.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Niedziałające CPT/taksonomieZbyt częste flushowanieZła kolejność regułCase sensitive?Przekierowanie to nie wszystko
Na przykład zmieniamy strukturę URLi kategorii
Czyli mamy:strona.pl/category/ciekawe,a chcemy mieć:strona.pl/blog/ciekawe
Pytamy się na forum lub FB jak to zrobić
i otrzymujemy odpowiedź, że wystarczy dodać regułęmod rewrite do pliku .htaccess
Dodajemy. Sprawdzamy, że nowy format URL działa izadowoleni zamykamy temat
Ale to nie jest rozwiązanie, bo np. funkcja get category linknadal będzie generować standardowe URLe.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Stronicowanie zamiast paginacjiSztuczna strona, której nie maWbudowanie własnego kodu w WP
Zamieniamy page na strona
Problem
Chcemy sprawić, aby paginacja używała słowa strona zamiast page.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Stronicowanie zamiast paginacjiSztuczna strona, której nie maWbudowanie własnego kodu w WP
Zamieniamy page na strona
Problem
Chcemy sprawić, aby paginacja używała słowa strona zamiast page.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Stronicowanie zamiast paginacjiSztuczna strona, której nie maWbudowanie własnego kodu w WP
Koszyk, logowanie, itp.
Problem
Chcemy dodać dynamicznie generowaną stronę, która będzieudawała zwykłą stronę, ale nie będzie można jej edytować.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Stronicowanie zamiast paginacjiSztuczna strona, której nie maWbudowanie własnego kodu w WP
Koszyk, logowanie, itp.
Problem
Chcemy dodać dynamicznie generowaną stronę, która będzieudawała zwykłą stronę, ale nie będzie można jej edytować.
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Stronicowanie zamiast paginacjiSztuczna strona, której nie maWbudowanie własnego kodu w WP
A jeśli chcemy podpiąć coś większego?
Problem
Łączymy własny kod PHP (ale nie tylko) z WordPressem.
A w pliku /core/ogloszenia.php
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Stronicowanie zamiast paginacjiSztuczna strona, której nie maWbudowanie własnego kodu w WP
A jeśli chcemy podpiąć coś większego?
Problem
Łączymy własny kod PHP (ale nie tylko) z WordPressem.
A w pliku /core/ogloszenia.php
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Stronicowanie zamiast paginacjiSztuczna strona, której nie maWbudowanie własnego kodu w WP
A jeśli chcemy podpiąć coś większego?
Problem
Łączymy własny kod PHP (ale nie tylko) z WordPressem.
A w pliku /core/ogloszenia.php
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite
WstępCzęste problemy i błędy
Co można z tym w ogóle zrobić?
Stronicowanie zamiast paginacjiSztuczna strona, której nie maWbudowanie własnego kodu w WP
Dziękuję za uwagę!
Krzysiek Dróżdż[email protected]
Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite