odczarowujemy wp rewrite · add rewrite endpoint() add feed() krzysiek dróżd ż...

44
Wstęp Częste problemy i blędy Co można z tym w ogóle zrobić? Odczarowujemy WP Rewrite Krzysiek Dróżdż [email protected] WPmagus.pl Wroclaw, 27 czerwca 2013 Krzysiek Dróżdż [email protected] Odczarowujemy WP Rewrite

Upload: others

Post on 16-Jun-2020

9 views

Category:

Documents


0 download

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