Przepisywanie adresów URL w poradach i wtyczkach WordPress
Najnowsze aktualizacje WordPress pozwoliły programistom bardzo szybko dostosować ich osobistą stronę internetową. Aktualizowanie obszarów motywu jest proste, zastępuje widgety na pasku bocznym, a nawet pisze własne niestandardowe funkcje kodu PHP. Przestrzeń jest ogromna - a jednym z obszarów popularności jest przepisywanie całkiem niezłych adresów URL.
Istnieje kilka metod, których możesz użyć do aktualizacji domyślnego systemu przepisywania WordPress. W tym samouczku podzielę się kilkoma przykładami i pokażę, jak prosty może być ten proces. Będziesz potrzebował zrozumienia PHP, aby śledzić, co dzieje się w kodzie, ale kopiowanie i wklejanie do własnego szablonu jest tak łatwe, że praktycznie nie ma w nim pracy.
Zrozumienie WP_Rewrite
Jeśli jesteś w ogóle zaznajomiony z mod_rewrite na serwerach Apache, to skorzystasz ze składni przepisywania WordPressa. Ich system jest wciąż zbudowany na jednym .htaccess plik, ale wszystkie reguły są kodowane w PHP. To sprawia, że proces jest nieco łatwiejszy, ponieważ mamy większą kontrolę nad pisaniem własnych adresów URL.
Polecam przeglądanie strony klasy $ wp_rewrite, ponieważ zawiera mnóstwo informacji na ten temat. Istnieją nawet małe przykłady, do których możemy się odnieść, aby wszystko było łatwiejsze do zrozumienia. Większość kodu można napisać bezpośrednio do motywu functions.php plik. Zacznijmy od przyjrzenia się domyślnym przepisaniom już dołączonym do WordPressa.
Zawartość reguł $ wp_rewrite->
Deklarując $ wp_rewrite
klasa jako globalna mamy dostęp do wszystkich danych wewnętrznych. Kiedy idziesz do dołączania własnych reguł, są one dodawane do tablicy z nazwą $ wp_rewrite-> zasady
. Ważne jest, aby pamiętać tę zmienną, ponieważ prawdopodobnie będziesz musiał odwoływać się do danych wiele razy podczas rozwoju.
zasady); ?>
Dodałem ten blok kodu do moich motywów page.php plik. Będzie wyświetlał duży zbiór danych, który wygląda jak duży bałagan. Ale jeśli ty Pokaż źródło na twojej stronie można łatwo zobaczyć, które reguły przepisywania są dopasowane do której nazwy pliku. Na przykład spójrzmy na reguły przepisywania kategorii:
[kategoria /(.+?)/?$] => index.php? category_name = $ matches [1]
Bit po lewej stronie w nawiasach to nasza Apache RewriteRule do wyszukania. Począwszy od sekcji /Kategoria/ po którym następuje dowolny ciąg znaków. Jeśli jest to zgodne, serwer wie, do czego się odnieść index.php? category_name =
podczas zastępowania zmiennej na końcu.
Ustawianie niestandardowych łączy Permalink
W samej klasie $ wp_rewrite jest tak dużo treści. Można odwoływać się do wielu innych właściwości, takich jak $ wp_rewrite-> category_base
lub $ wp_rewrite-> author_base
do ciągnięcia domyślnych struktur URL dla tych stron. Ale oprócz wyciągania domyślnych ustawień WP możemy również tworzyć własne reguły.
Przebudowa bazy autora
Po wejściu na stronę ustawień Permalinks masz możliwość resetowania kategorii i tagów. Jednak opcja resetowania bazy autora jest dziwnie brakująca.
Ale możemy użyć add_rewrite_rule ()
z kodeksu WordPress, aby zintegrować niektóre nowe ustawienia. W tym przypadku zastąpiłem /autor/ z /pisarz/ ale możesz użyć dowolnej bazy, którą lubisz. Dodatkowo skopiowałem niektóre inne przekierowania dla stron autora i kanałów RSS. Możesz dodać ten blok kodu do pliku functions.php motywu.
add_action ('init', 'add_author_rules'); function add_author_rules () add_rewrite_rule ("autor / ([^ /] +) /?", "index.php? nazwa_autora = $ mecze [1]", "top"); add_rewrite_rule ("autor / ([^ /] +) / strona /? ([0-9] 1,) /?", "index.php? nazwa_autora = $ pasuje [1] i paged = $ dopasowania [2] ", "Top"); add_rewrite_rule ("autor / ([^ /] +) / (kanał | rdf | rss | rss2 | atom) /?", "index.php? nazwa_autora = $ dopasowania [1] & feed = $ mecze [2]", " Top"); add_rewrite_rule ("autor / ([^ /] +) / feed / (feed | rdf | rss | rss2 | atom) /?", "index.php? nazwa_autora = $ dopasowuje [1] & feed = $ dopasowuje [2]” , "Top");
Dostęp do tej funkcji można uzyskać nawet bez użycia zmiennej $ wp_rewrite. Niektórzy programiści lubią tę metodę, ponieważ jest prostsza niż kodowanie z właściwościami klasy. Zauważyłem jednak, że ta metoda nie zawsze jest niezawodna dla niektórych instalacji WordPress. W rzeczywistości istnieje druga opcja dodawania tych reguł na haku po opróżnieniu twojego .htaccess (patrz poniżej).
Autor bazy przy użyciu generate_rewrite_rules
Pisząc dla tej metody, będziemy ponownie potrzebować globalnej klasy $ wp_rewrite. Następnie ustawiłem nową zmienną o nazwie $ new_rules
który zawiera tablicę asocjacyjną danych. Mój przykładowy kod po prostu przepisuje podstawową sekcję strony autora.
funkcja generate_author_rewrite_rules () global $ wp_rewrite; $ new_rules = array ("autor / ([^ /] +) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> reguły;
Ale jeśli chcemy włączyć wiele stron i kanałów RSS, możemy ulepszyć tablicę. Masz możliwość utworzenia funkcji PHP w celu przesuwania danych tablicy asocjacyjnej, co może być trochę zbyt skomplikowane. Możemy również podzielić bloki danych za pomocą przecinków, zachowując się jako oddzielne elementy w tablicy. Sprawdź mój zaktualizowany kod ponownie napisany w pliku motywu functions.php.
funkcja generate_author_rewrite_rules () global $ wp_rewrite; $ new_rules = array ("autor / ([^ /] +) /?" => "index.php? nazwa_autora =". $ wp_rewrite-> preg_index (1), "autor / ([^ /] +) / strona /? ([0-9] 1,) /? "=>" Index.php? Nazwa_autora = ". $ Wp_rewrite-> preg_index (1)." & Paged = ". $ Wp_rewrite-> preg_index (2), "autor / ([^ /] +) / (feed | rdf | rss | rss2 | atom) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1). "& feed =". $ wp_rewrite-> preg_index (2), "autor / ([^ /] +) / feed / (feed | rdf | rss | rss2 | atom) /?" => "index.php? author_name =". $ wp_rewrite- > preg_index (1). "& feed =". $ wp_rewrite-> preg_index (2)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> reguły;
Pamiętaj tylko, że żadna z tych metod nie zadziała, dopóki nie wyczyścisz oryginalnych reguł przepisywania. Będziesz musiał to zrobić za każdym razem, gdy dokonasz zmian w tych funkcjach, ale później twoje nowe zasady zostaną zablokowane na czas nieokreślony.
Opróżnianie reguł przepisywania
Za każdym razem, gdy aktualizujesz kod przepisywania adresu URL, zmiany nie są stosowane natychmiast. Musisz opróżnić reguły przepisywania .htaccess, aby nowy kod został dodany. Jednak wykonanie tego na każdej stronie init jest wyjątkowo marnotrawne, ponieważ zapisuje się w bazie danych i odświeża plik .htaccess.
Lepszą metodą jest uzyskanie dostępu do strony permalinków w panelu administracyjnym i ponowne zapisanie zmian. To zawsze wywołuje flush_rewrite_rules, więc nigdy nie musisz się martwić o problemy użytkowników z interfejsem. Wystarczy tylko jeden raz, aby ponownie zapisać stronę i zaktualizować wszystkie reguły w systemie. Ale jeśli to nie zadziała, możesz spróbować zadzwonić $ wp_rewrite-> flush_rules ();
Korzystanie z zasad innych niż WP
W środku $ wp_rewrite
klasa mamy dostęp do dziesiątek nieruchomości. Jedną z ważniejszych opcji jest $ wp_rewrite-> non_wp_rules
który zbiera tablicę przekierowań, które nie trafiają do pliku index.php.
Jest to najczęściej używane w rozwoju wtyczki WordPress. Możesz nacisnąć określony niestandardowy typ adresu URL (np / kalendarz / czerwiec-2012 /
) do zaplecza Twojej witryny (/wp-content/plugins/calendarplug/myscript.php
). Ale oczywiście istnieją dodatkowe zastosowania tej asocjacyjnej tablicy reguł przepisywania niestandardowego innych niż wtyczki. Podałem doskonały przykład w poniższym kontekście.
Maskowanie plików motywu
To częsta sugestia, którą często widzę na forach dyskusyjnych WordPress. Idealnie chcielibyśmy odwołać się do niektórych plików wewnątrz / wp-content / themes / mytheme /
folder z bardziej eleganckim adresem URL. Zauważ, że będzie to wymagało innego zestawu poprawek WordPress, aby zmienić strukturę katalogów.
Wewnętrzny system przepisywania WordPress zawsze przesuwa zawartość w kierunku pojedynczego pliku routingu. W domyślnym przypadku używamy index.php wraz z dodatkowymi danymi łańcucha zapytania. Ale do ukrycia naszego standardowego katalogu szablonów (/ wp-content / themes / mytheme / *
) będziemy musieli wyświetlić wiele różnych plików.
add_action ('generate_rewrite_rules', 'themes_dir_add_rewrites'); function themes_dir_add_rewrites () $ theme_name = next (rozbij ('/ themes /', get_stylesheet_directory ())); global $ wp_rewrite; $ new_non_wp_rules = array ('css /(.*)' => 'wp-content / themes /'. $ theme_name. '/ css / $ 1', 'js /(.*)' => 'wp-content / themes / '. $ theme_name.' / js / $ 1 ',' images / wordpress-urls-rewrite /(.*) '=>' wp-content / themes / '. $ theme_name.' / images / wordpress-urls-rewrite / $ 1 ',); $ wp_rewrite-> non_wp_rules + = $ new_non_wp_rules;
Napisałem nową funkcję themes_dir_add_rewrites ()
aby pobrać wszystkie główne treści z tych dłuższych adresów URL i przekierować je do zaplecza. Zauważ, że używamy tej innej tajemniczej właściwości klasy $ wp_rewrite o nazwie non_wp_rules
. Zgodnie z dokumentami są to reguły, które nie kierują do pliku index.php WP i będą obsługiwane na końcu serwera.
To, co jest tak wspaniałe w tych regułach innych niż WP, to to, że nadal można dość łatwo zarządzać starszą metodą URL. Nic nie stoi na przeszkodzie, aby linkować do:
/wp-content/themes/mytheme/images/wordpress-urls-rewrite/logo.jpg
.
Ale wygląda o wiele ładniej, jeśli możesz odnieść się do:
/images/wordpress-urls-rewrite/logo.jpg
zamiast.
Pomocne narzędzia i wtyczki
Istnieje tylko kilka narzędzi, które możesz wykorzystać, jeśli utkniesz w kodowaniu własnych, pięknych adresów URL. Proces jest bardzo trudny do zrozumienia, więc nie zniechęcaj się, jeśli walczysz przez kilka tygodni. Czuję, że treść będzie łatwiejsza, gdy będziesz spędzać więcej czasu ćwicząc.
Ale aby zacząć, sprawdź niektóre z tych przydatnych narzędzi i wtyczek. Prawdopodobnie nie będziesz ich potrzebować, ale wspaniale jest znaleźć tak dużą bazę programistów pracującą nad poprawkami WP.
Analizator przepisywania Monkeyman
Po pierwszym przejściu do reguł przepisywania wtyczka ta jest obowiązkowa. W rzeczywistości nie zmienia żadnych reguł Twojej witryny - pozwala jedynie przetestować kod i sprawdzić, które przekierowania trafiają na strony. Będzie nawet działać przy testowaniu niestandardowych zmiennych zapytań dla dowolnych typów postów.
AskApache RewriteRules Viewer
Jest to podobne do powyższej wtyczki, ale nie pozwala na testowanie własnych reguł. Zamiast tego ta wtyczka wyświetli wszystkie domyślne reguły WP twojej witryny i gdzie przekierowują. Obejmuje to wszystkie główne właściwości $ wp_rewrite
takie jak ustawienia permalinku i bazy stron / kategorii / znaczników.
WP htaccess Control
Tutaj masz inny zestaw reguł do tworzenia nowych przekierowań stron. Wtyczka ma własny panel administracyjny, w którym możesz edytować zmienne, takie jak baza autora, bazy stron, a nawet dodawać własne niestandardowe reguły .htaccess.
Ta metoda jest inna niż budowanie własnych przy użyciu wp_rewrite. Jednak może być łatwiej dla techników, którzy naprawdę znają serwery internetowe i czują się bardziej komfortowo pisząc bezpośrednio do .htaccess.
Przepisz tester reguł
W rzeczywistości nie jest to wtyczka WordPressa, ale jest zdecydowanie jednym przydatnym narzędziem do przechowywania plików. Możesz skopiować reguły przepisywania i przetestować je na swojej stronie bez konieczności edycji pliku .htaccess. Jest to doskonała metoda usuwania błędów ze składni przed uruchomieniem na żywo w sieci.
DW ReWrite
DW Rewrite to bardzo prosta wtyczka, która tworzy 3 unikalne ładne adresy URL natychmiast po instalacji. Domyślnie zmieni linki administratora, logowania i rejestracji /Administrator
, /Zaloguj Się
, i /zarejestrować
odpowiednio.
Może to być świetne, jeśli potrzebujesz szybkiej naprawy bloga z wieloma autorami. W szczególności ukryje zawstydzająco zawiły link rejestracyjny WordPress (/wp-login.php?action=register
).
Wniosek
Mam nadzieję, że ten samouczek może dostarczyć kilka przykładów, które pomogą ci przemyśleć przepisywanie WordPressa. CMS jest bardzo popularny, a programiści wciąż tworzą nowe funkcje każdego dnia. Dostosowywanie własnych adresów URL jest tak ogromną częścią funkcjonalności opartej na użytkownikach. Daje to Twojej stronie unikalną obecność i branding w porównaniu z opcjami domyślnymi.
Jeśli masz problemy z regułami przepisywania, cofnięcie uszkodzenia nigdy nie powinno być trudne. Po prostu usuwając kod funkcji i opróżniając reguły .htaccess, wydaje się, że nic się nie zmieniło. Sprawdź inne podobne artykuły na ten temat. A jeśli masz jakieś pytania lub komentarze, możesz podzielić się nimi z nami w obszarze dyskusji.