Prepisovanje URL-jev v WordPress nasvete in dodatke
Najnovejše posodobitve za WordPress so razvijalcem omogočile, da hitro prilagodijo svojo osebno spletno stran. Posodabljanje področij vaše teme je preprosto, zamenjava pripomočkov v stranski vrstici in celo pisanje lastnih funkcij kode PHP. Prostor je ogromen - in eno območje priljubljenosti je prepisovanje lepe URL permalinks.
Obstaja nekaj metod, ki jih lahko uporabite za posodobitev privzetega WordPress sistema za pisanje. V tej vadnici bom razložil nekaj primerov in pokazal, kako preprost je lahko proces. Potrebovali boste nekaj razumevanja PHP, da boste lahko spremljali, kaj se dogaja v kodi, vendar je tako preprosto kopirati in prilepiti v lastno predlogo, praktično ni vključeno delo.
Razumevanje WP_Rewrite
Če ste sploh seznanjeni z mod_rewrite na strežnikih Apache, potem boste izbrali sintakso za pisanje na WordPress. Njihov sistem je še vedno zgrajen na vrhu .htaccess vendar so vsa pravila kodirana v PHP. To dejansko olajša postopek, saj imamo več nadzora nad pisanjem lastnih URL-jev.
Priporočam skimming $ wp_rewrite razred strani, saj je ton informacij o tem. Obstajajo celo majhni primeri, ki jih lahko omenimo, da bi bilo vse lažje razumeti. Večino kode lahko napišete neposredno v vašo temo functions.php mapa. Začnimo s pregledom privzetih preoblikovanj, ki so že vključeni v WordPress.
Vsebina pravil $ wp_rewrite->
Z razglasitvijo $ wp_rewrite
kot globalni imamo dostop do vseh notranjih podatkov. Ko boste dodali svoja pravila, bodo ti dodani v polje z imenom $ wp_rewrite-> pravila
. Pomembno je, da si zapomnite to spremenljivko, saj boste verjetno morali med razvojem podatke večkrat navesti.
pravila); ?>
Dodal sem ta blok kode v mojo temo page.php mapa. Izpisal bo veliko zbirko podatkov, ki izgleda kot velik nered. Ampak, če vi Prikaži vir na vaši strani je dejansko preprosto videti, katera pravila za prepisovanje se ujemajo s katerim imenom datoteke. Oglejmo si na primer pravila za prepisovanje kategorij:
[category /(.+?)/?$] => index.php? category_name = $ ujemanja [1]
Bit na levi strani v oklepajih je naš Apache RewriteRule iskati. Začenši z razdelkom / kategorija / sledi katerikoli niz znakov. Če se to ujema, strežnik pozna referenco index.php? category_name =
medtem ko spremenljivko zamenjujemo na koncu.
Nastavitev dovoljenj po meri
V razredu $ wp_rewrite je tako veliko vsebine. Lahko se sklicujete na veliko drugih lastnosti, kot je npr $ wp_rewrite-> category_base
ali $ wp_rewrite-> author_base
za vlečenje privzetih struktur URL za te strani. Poleg privzetih nastavitev WP lahko izdelamo tudi lastna pravila.
Obnova baze avtorja
Ko vstopite na stran z nastavitvami dovoljenj, lahko ponastavite osnove kategorije in oznake. Vendar pa možnost ponastavitve baze avtorja ni čudna.
Vendar lahko uporabimo add_rewrite_rule ()
iz kodeksa WordPress za vključitev nekaterih novih nastavitev. V tem primeru sem zamenjal / avtor / z / pisatelj / lahko pa uporabiš katerokoli bazo, ki ti je všeč. Poleg tega sem kopiral nekatere druge preusmeritve za strani avtorja in vire RSS. Ta blok kode lahko dodate v datoteko functions.php.
add_action ('init', 'add_author_rules'); function add_author_rules () add_rewrite_rule ("writer / ([^ /] +) /?", "index.php? author_name = $ se ujema [1]", "top"); add_rewrite_rule ("writer / ([^ /] +) / page /? ([0-9] 1,) /?", "index.php? author_name = $ ujema [1] & paged = $ ujemanja [2] "," vrh "); add_rewrite_rule ("writer / ([^ /] +) / (vir | rdf | rss | rss2 | atom) /?", "index.php? author_name = $ se ujema [1] & feed = $ ujema [2]", " na vrh “); add_rewrite_rule ("writer / ([^ /] +) / feed / (vir | rdf | rss | rss2 | atom) /?", "index.php? author_name = $ se ujema [1] & feed = $ ujema [2]" , "vrh");
Do te funkcije lahko dostopate tudi brez uporabe spremenljivke $ wp_rewrite. Nekaterim razvijalcem je ta metoda všeč, ker je enostavnejša od trdega kodiranja z lastnostmi razreda. Vendar sem opazil, da ta metoda ni vedno zanesljiva za nekatere WordPress instalacije. Pravzaprav obstaja še ena možnost, da se ta pravila dodajo na kljuko, potem ko ste izpraznili svoj .htaccess (glej spodaj).
Avtor osnove z uporabo generate_rewrite_rules
Za to metodo bomo spet potrebovali globalni razred $ wp_rewrite. Potem sem nastavil novo spremenljivko z imenom $ new_rules
ki vsebuje asociativno polje podatkov. Moj primer spodnje kode samo prepiše za osnovni razdelek strani avtorja.
funkcija generate_author_rewrite_rules () globalni $ wp_rewrite; $ new_rules = array ("writer / ([^ /] +) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> pravila;
Toda, če želimo vključiti več strani in vire RSS, lahko povečamo obseg. Imate možnost, da ustvarite funkcijo PHP za potiskanje podatkov o asociativnem nizu, ki so morda preveč zapleteni. Podatke lahko tudi razdelimo preko vejic, obnašamo se kot ločeni subjekti v matriki. Oglejte si mojo posodobljeno kodo, ponovno napisano v datoteki functions.php.
funkcija generate_author_rewrite_rules () globalni $ wp_rewrite; $ new_rules = array ("writer / ([^ /] +) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1), "writer / ([^ /] +) / page /? ([0-9] 1,) /? "=>" Index.php? Author_name = ". $ Wp_rewrite-> preg_index (1)." & Paged = ". $ Wp_rewrite-> preg_index (2), "writer / ([^ /] +) / (vir | rdf | rss | rss2 | atom) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1). "& feed =". $ wp_rewrite-> preg_index (2), "writer / ([^ /] +) / feed / (vir | 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-> pravila;
Zapomnite si, da nobena od teh metod ne bo delovala, dokler ne boste spraznili prvotnih pravil za pisanje. To boste morali storiti vsakič, ko boste spremenili te funkcije, potem pa se bodo vaša nova pravila držala za nedoločen čas.
Flushing the Rewrite Rules
Vsakič, ko posodobite kodo za prepis URL-ja, spremembe ne veljajo takoj. Pravila za prepis .htaccess morate izprazniti tako, da bo nova koda dodana. Vendar pa je izvajanje tega na vsaki strani init izjemno potratno, saj piše v bazo podatkov in trdo osveži datoteko .htaccess.
Boljša metoda je dostop do vaše permalinks strani v skrbniški plošči in ponovno shranjevanje sprememb. To vedno zahteva flush_rewrite_rules, tako da vam nikoli ne bo treba skrbeti, da bodo uporabniki na prednji strani naleteli na težave pri nalaganju. Za ponovno shranitev strani in posodobitev vseh pravil v sistemu potrebujete le enkrat. Ampak, če to ne deluje, lahko poskusite poklicati $ wp_rewrite-> flush_rules ();
Uporaba pravil, ki niso WP
V notranjosti $ wp_rewrite
razreda imamo dostop do več deset nepremičnin. Ena od pomembnejših možnosti je $ wp_rewrite-> non_wp_rules
ki zbira matriko preusmeritev, ki ne dosežejo datoteke index.php.
To se dejansko uporablja najpogosteje v razvoju vtičnikov WordPress. Pritisnete lahko določeno vrsto URL-ja po meri (npr / koledar / junij-2012 /
) v ozadje vašega spletnega mesta (/wp-content/plugins/calendarplug/myscript.php
). Seveda obstajajo nadaljnje uporabe tega asociativnega niza pravil za pisanje po meri, ki niso vtičniki. V spodnjem kontekstu sem podal odličen primer.
Maskiranje datotek s temami
To je pogost predlog, ki ga pogosto vidim na WordPressovih forumih. V idealnem primeru bi radi omenili nekaj datotek znotraj / wp-content / themes / mytheme /
mapo z bolj elegantnim URL-jem. Opazili boste, da bo za spremembo strukture imenika potreben drugačen nabor napotkov za WordPress.
Notranji sistem za ponovno pisanje WordPress vedno potiska vsebino v eno samo datoteko za usmerjanje. V privzetem primeru uporabimo index.php skupaj z dodatnimi podatki o nizu poizvedb. Toda za skrivanje našega standardnega imenika predloge (/ wp-content / themes / mytheme / *
), bomo morali prikazati veliko različnih datotek.
add_action ('generate_rewrite_rules', 'themes_dir_add_rewrites'); funkcija themes_dir_add_rewrites () $ theme_name = next (eksplodira ('/ 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;
Napisal sem novo funkcijo themes_dir_add_rewrites ()
povleči vse glavne vsebine iz teh daljših URL-jev in jih preusmeriti v ozadje. Opazite, da uporabljamo to drugo skrivnostno lastnost razreda $ wp_rewrite non_wp_rules
. V skladu z dokumenti so to pravila, ki se ne nanašajo na datoteko index.php WP in bodo obdelana na koncu strežnika..
V pravilih, ki niso WP, je tako veliko, da lahko starejšo metodo URL preprosto upravljate. Nič ne preprečuje, da bi se povezali z:
/wp-content/themes/mytheme/images/wordpress-urls-rewrite/logo.jpg
.
Vendar pa je videti precej lepše, če lahko navedete:
/images/wordpress-urls-rewrite/logo.jpg
namesto tega.
Koristna orodja in vtičniki
Obstaja le nekaj orodij, ki jih lahko uporabite, če ste obtičali s kodiranjem lastnih lepih URL-jev. Proces je zelo težko razumeti, zato se ne obupajte, če se borite nekaj tednov. Menim, da bo vsebina postala lažja, ko boste več časa preživeli.
Toda za začetek si oglejte nekaj teh priročnih orodij za vnovično pisanje in dodatkov. Verjetno ne boste potrebovali vseh, vendar je super, da najdete tako veliko bazo razvijalcev, ki se ukvarja s pisanjem WP.
Monkeyman Rewrite Analyzer
Ko prvič skočite v pravila za ponovno pisanje, je ta plugin nujno potreben. Pravzaprav ne spremeni nobenega pravila za vašo spletno stran - zgolj vam omogoča, da preizkusite kodo in vidite, katere preusmeritve gredo na katere strani. Delala bo tudi za preizkušanje spremenljivk poizvedb po meri za vse tipe po meri.
Pregledovalnik AskApache RewriteRules
To je podobno zgornjemu vtičniku, vendar vam ne omogoča preverjanja lastnih pravil. Namesto tega bo ta vtičnik prikazal vsa privzeta WP pravila vašega spletnega mesta in kje jih preusmerijo. To bo vključevalo vse glavne lastnosti $ wp_rewrite
kot so nastavitve permalink in osnove strani / kategorije / oznake.
WP htaccess nadzor
Tukaj imate drugačen nabor pravil za preusmerjanje novih strani. Vtičnik ima lastno skrbniško ploščo, kjer lahko urejate spremenljivke, kot so baza avtorja, osnove strani in celo dodate svoje lastne .htaccess pravila..
Ta metoda je drugačna v primerjavi z gradnjo lastne uporabe wp_rewrite. Vendar pa je lahko lažje za techies, ki resnično poznajo spletne strežnike in počutijo bolj udobno pisanje neposredno v. Htaccess.
Preverjanje pravilnika za pravila
To dejansko ni WordPress vtičnik, vendar je vsekakor eno priročno orodje za shranjevanje. Lahko prekopirate pravila za pisanje in jih preizkusite za vašo spletno stran, ne da bi kdaj urejali datoteko .htaccess. To je odlična metoda za odstranjevanje napak iz vaše skladnje pred zagonom v živo na spletu.
DW ReWrite
DW Rewrite je zelo preprost vtičnik, ki ustvari 3 edinstvene lepe URL-je takoj po namestitvi. Privzeto bo spremenil povezave za skrbnika, prijavo in registracijo / admin
, /Vpiši se
, in / register
v tem zaporedju.
To je lahko super, če potrebujete hitro rešitev za spletni dnevnik, ki vsebuje več avtorjev. Izrecno bo skril neprijetno zamotano povezavo za registracijo WordPress (/wp-login.php?action=register
).
Zaključek
Upam, da vam lahko ta vadnica ponudi nekaj primerov, s katerimi boste razmišljali o preoblikovanju WordPressa. CMS je zelo priljubljen in razvijalci še vedno proizvajajo nove funkcije vsak dan. Prilagajanje lastnih naslovov URL je tako velika funkcionalnost, ki temelji na uporabniku. To daje vaši spletni strani svojo edinstveno prisotnost in blagovno znamko v primerjavi s privzetimi možnostmi.
Če imate težave s spremembami pravil nikoli ne bi smelo biti težko razveljaviti škodo. Če preprosto izbrišete kodo funkcije in izpraznite pravila .htaccess, se zdi, da se nič ni spremenilo. Bodite prepričani, da preverite nekatere druge podobne članke, ki jih lahko najdete na to temo. Če imate kakršna koli vprašanja ali komentarje, jih lahko delite z nami na območju za razpravo.