Utilizarea WordPress pentru dezvoltarea aplicațiilor web Caracteristici disponibile, Partea 6 Rescrierea URL-urilor (sau rute)

Unul dintre cele mai frumoase lucruri despre cadrele moderne de dezvoltare a aplicațiilor web este acela că ele oferă o modalitate de a genera rute cu adevărat curate - sau scheme de adrese URL - care să corespundă modelului conceptual al modului în care este structurată aplicația.

De exemplu, dat fiind un anumit tip de date - să zicem, o Individual-este posibil să puteți efectua următoarele acțiuni:

  • adăuga
  • Actualizați
  • șterge

Si asa mai departe.

În funcție de natura cererii dvs., ați putea să faceți mai mult (cum ar fi, de exemplu, adăugați un soț / soție), dar în scopul acestui post, operațiunile CRUD de bază sunt suficiente pentru a demonstra punctul.

Pentru cei dintre voi care au urmat, ne-am uitat la o varietate de caracteristici pe care WordPress le oferă ca bază pentru dezvoltarea aplicațiilor. În continuarea acestei discuții, este important să aruncăm o privire la API-urile care sunt disponibile pentru a personaliza regulile de revizuire a WordPress.

Utilizatorul mediu este probabil familiarizat cu modul de schimbare a schemei de adrese URL din tabloul de bord WordPress - despre care vom discuta pe scurt pentru a vă asigura că suntem cu toții pe aceeași pagină - cu toate acestea, există mult mai multe capabilități disponibile celor care înțeleg rescrierea URL-urilor în WordPress.

De fapt, avem abilitatea de a construi reguli de rescriere a URL-urilor care să se potrivească și să funcționeze la fel ca cele ale cadrelor moderne MVC.


Înțelegerea regulilor de rescriere

Pentru a vă asigura că suntem cu toții pe aceeași pagină, regulile de rescriere pot fi considerate ca fiind un fel de potrivire a unui anumit model cu serverul web pentru a prelua date din baza de date.

De exemplu, în instalarea standard WordPress, structura permalink implicită este astfel:

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

Această adresă URL include un parametru de șir de interogări - și anume perechea de valori cheie p = 123 care, în contextul WordPress, spune "recupera postul cu ID-ul de 123".

Dacă priviți mai profund opțiunile de pe Permalink Settings ecran, veți vedea, de asemenea, o varietate de opțiuni:

Un alt exemplu de reguli de rescriere pe care probabil că le veți vedea sunt ceea ce se numește "destul de permalinks" sau, după cum este numit în tabloul de bord WordPress, "Post Name".

În acest format, adresa URL arată astfel:

http://domain.com/post-title/

De aici, adresa URL solicitată intră în serverul web și apoi, pe baza unui set de reguli, determină ID-ul postului care are acel titlu și îl returnează clientului solicitant (care ar fi browser-ul).

Între aceste două exemple, există un principiu de bază în joc care demonstrează exact ce reguli de rescriere sunt.

Pe scurt, regulile de rescriere definesc un set de reguli în care URL-ul de intrare este tradus într-un format care recuperează informații din baza de date pentru client.

Desigur, aceasta ridică două întrebări:

  1. Cum se generează regulile de rescriere?
  2. Și, poate mai important, de ce sunt atât de complicate?

Regulile businessului de rescriere

Motivul pentru care regulile de rescriere pot servi drept o provocare pentru dezvoltatori este că ele se bazează pe expresii regulate. Și există un citat vechi despre expresiile regulate ale lui Jamie Zawinski:

Unii oameni, atunci când se confruntă cu o problemă, cred că "știu, voi folosi expresii regulate". Acum au două probleme.

Ciudat, dar adevărat. Și asta de ce se ocupa de regulile personalizate de rescriere in WordPress poate fi o provocare pentru multi dezvoltatori.

Din păcate, nu putem demonstra fiecare variantă sau tip de schemă de adrese URL care pot fi create sau susținute de regulile de rescriere, dar putem să aruncăm o privire la câteva exemple practice care arată cum să începeți și să oferiți o fundație sau un ghid pentru ceea ce ar trebui să facem în activitatea viitoare cu aplicațiile noastre.

Declanșarea regulilor de rescriere

Un lucru important este de notat că atunci când definiți regulile de rescriere, acestea nu vor intra imediat în aplicare - acestea vor fi spălate. Aceasta înseamnă că trebuie să ștergeți vechiul set de reguli, să le înlocuiți cu noul set de reguli.

Există două modalități prin care puteți face acest lucru:

  1. Puteți face clic pe Salvează modificările în Permalink Settingstablou de bord. În ciuda faptului că va fi selectată o opțiune, indiferent de ce ați definit în aplicația dvs. functions.php fișierul va fi utilizat.
  2. Puteți să sunați $ Wp_rewrite-> flush_rules (); și să gestioneze programatic această problemă.

Indiferent de ruta pe care o alegeți, este important să vă amintiți acest pas deoarece de fiecare dată când definiți o nouă regulă de rescriere, va trebui să eliminați regulile vechi.

Cum funcționează API-ul de rescriere?

Când vine vorba de scrierea propriilor reguli de rescriere, este important să înțelegem cum funcționează API-ul Rewrite.

Acesta poate fi distilat într-un proces în patru etape:

  1. Se solicită o adresă URL de la serverul web.
  2. Dacă există conținut la adresa URL solicitată, atunci conținutul va fi returnat (aceasta poate fi o imagine, un font sau orice altceva).
  3. Dacă conținutul nu există, atunci cererea va fi direcționată către index.php care se va potrivi cu modelul adresei URL.
  4. Apoi, conținutul va fi returnat de la WordPress clientului solicitant.

Dacă sunteți interesat să vedeți definiția regulilor de rescriere pe baza configurației pe care o aveți în Permalink tablou de bord, verificați pluginul Rewrite Rules Inspector.

Acest plugin va afișa o listă a tuturor regulilor care există în prezent pentru a se potrivi cu schemele de adrese URL specificate, completate cu expresiile regulate și variabilele potrivite împotriva index.php.

Are sens? Dacă nu, să aruncăm o privire la câteva exemple simple și practice.

Un exemplu de reguli de rescriere

Având în vedere că știm că modelele vor fi potrivite și că vor trece index.php, putem profita de add_rewrite_rule pentru a defini modul în care vor funcționa adresele URL personalizate.

Un scurt titlu pentru un ID de postare

Să spunem că ne uităm la prima postare din sistem - adică căutăm postul cu ID-ul de 1.

În cele mai multe instalări de WordPress de vanilie, aceasta este Salut Lume iar adresa URL este de obicei http://domain.com/hello-world sau http://domain.com/?p=1 în funcție de setările permalink (care este setul actual de reguli de rescriere).

Dar să definim o astfel de regulă http://domain.com/first va încărca, de asemenea, primul post în baza de date:

 funcția example_add_rewrite_rules () add_rewrite_rule ('prima', 'index.php? p = 1', 'sus'); flush_rewrite_rules ();  add_action ('init', 'example_add_rewrite_rules');

Să adăugăm încă o regulă care va urma exemplul și să ne permită să încărcăm al doilea post în baza de date. Și anume, http://domain.com/?p=2.

funcția example_add_rewrite_rules () add_rewrite_rule ('prima', 'index.php? p = 1', 'sus'); add_rewrite_rule ('a doua', 'index.php? p = 2', 'sus'); flush_rewrite_rules ();  add_action ('init', 'example_add_rewrite_rules');

Presupunând că ați citit documentația pentru regula add_rewrite, acest lucru este destul de ușor să înțelegeți, corect?

Pe scurt, este nevoie de trei argumente:

  • Primul argument este o expresie regulată care se potrivește cu adresa URL solicitată. În cazul nostru, folosim cuvinte simple.
  • Al doilea argument este URL-ul pentru a prelua efectiv. Din nou, în cazul nostru, preluăm prima și a doua postare, respectiv.
  • În final, ultimul argument este prioritatea, care poate fi "de sus" sau "de jos". Dacă este setat ca "de sus", atunci această regulă va fi evaluată mai presus de toate celelalte reguli; cu toate acestea, dacă "jos", atunci acesta va fi evaluat ultima.

Acum, aceste exemple sunt de bază. Acest lucru nu este suficient pentru a ne arăta cum să configurați rute personalizate, cum ar fi cele pe care le-am prezentat mai devreme în acest articol. Pentru a face acest lucru trebuie să aruncăm o privire la unele expresii mai complexe.

Note privind importul despre regulile de rescriere în flushing

Dar, înainte de a face acest lucru, este important să notați că sunați flush_rewrite_rules () cum facem mai sus este de fapt a practici incorecte. Funcționează în exemplul de mai sus, dar poate încetini efectiv timpul de încărcare al unui site.

De fapt, trebuie doar să fie apelată ori de câte ori se schimbă regulile de rescriere. Acest lucru se poate întâmpla de fiecare dată când un plugin este activat sau se poate schimba atunci când o temă este activată.

Indiferent de situație, asigurați-vă că vă atribuiți corespunzător funcțiile astfel încât regulile de rescriere să nu fie eliminate în fiecare încărcare a unei singure pagini - doar ori de câte ori s-au modificat regulile de rescriere.


O abordare mai complicată pentru rescrierea regulilor

Pentru a introduce un set mai complex de reguli de rescriere ca cele pe care le-am detaliat mai devreme în acest post de la operațiunile CRUD, este important să înțelegem următoarele două funcții:

  • add_rewrite_tag va permite WordPress să știe de variabilele șirului personalizat de interogare. Acest lucru este, de asemenea, utilizat împreună cu următoarea funcție.
  • add_rewrite_rule, după cum sa menționat, ne va permite să adăugăm reguli suplimentare de rescriere la WordPress (precum și setarea priorității acestora).

Acum, să spunem că avem un tip de post personalizat chemat Individual care reprezintă o persoană în cerere. Apoi, să spunem că Individual are, de asemenea, următoarele metode și adrese URL corespunzătoare:

  • toate: http://domain.com/individuals/
  • Actualizați: http://domain.com/individual/update/1 care este utilizat pentru a actualiza prima persoană
  • ștergehttp://domain.com/individual/delete/1 care este folosit pentru a șterge prima persoană

Deci, schema este suficient de simplă, dar cum o vom implementa?

În primul rând, trebuie să definim regulile de rescriere:

 funcția example_add_rewrite_rules () // Definiți eticheta pentru ID-ul individual add_rewrite_tag ('% individual_id%', '([0-9] *)'); // Definiți regulile pentru fiecare persoană add_rewrite_rule ('^ individual / update / ([0-9] *)', 'index.php? Individual = update & individual_id = $ meci [1]', 'sus'); add_rewrite_rule ('^ individual / delete / ([0-9] *)', 'index.php? individual = delete & individual_id = $ meciuri [1]', 'sus');  add_action ('init', 'example_add_rewrite_rules');

Apoi, trebuie să definim aceste funcții personalizate pentru fiecare persoană, astfel încât să actualizeze înregistrarea corectă în baza de date atunci când este apelată.

În acest caz, vom defini două funcții - una pentru actualizarea Individual și unul pentru ștergerea Individual. Următorul cod presupune, de asemenea, că anumite informații vor fi conținute în formularul trimis de browser.

Mai exact, presupune că ID-ul individual, prenumele, numele de familie și alte informații vor fi trimise pentru a actualiza individul.

 funcția example_process_individual ($ input) if (example_updating_user ()) example_update_individual ($ input);  altfel dacă ('true' == $ input ['delete_individual']) example_delete_individual ($ input ['individual_id']);  dacă (! is_admin ()) add_action ('init', 'example_process_individual'); funcția example_update_individual ($ input) / * Colecția de intrări $ primite dintr-un formular presupus * care va fi utilizat pentru a actualiza utilizatorul. * * Poate include informații cum ar fi ID-ul, numele, * numele de familie și așa mai departe. * * După succes, utilizați wp_redirect pentru a reveni la pagina de pornire sau pentru a reîncărca * pagina pentru a afișa o eroare. * / funcția example_delete_individual ($ individual_id) / * Utilizați ID-ul de intrare pentru a localiza înregistrarea individuală și ao elimina * din baza de date. * * După succes, utilizați wp_redirect pentru a reveni la pagina de pornire sau pentru a reîncărca * pagina pentru a afișa o eroare. * / funcția example_updating_user () return 0 == strpos ($ _SERVER ['REQUEST_URI'], '/ individual / update');  funcția example_deleting_user () return 0 == strpos ($ _SERVER ['REQUEST_URI'], '/ individual / delete'); 

Observați mai sus că prima funcție este cuplată în init acțiune și este numai dacă utilizatorul nu este conectat ca administrator. Acest lucru ar putea fi îmbunătățit în plus prin setarea condiționată de încărcare numai dacă vine dintr-o anumită pagină; totuși, pentru acest exemplu, își servește scopul.

Apoi, citiți comentariile codului pentru Actualizați si Șterge pentru a vedea cum ar trebui să funcționeze.

În cele din urmă, rețineți că ultimele două funcții sunt niște ajutoare simple, menite să ne permită să scriem un cod mai curat în funcția inițială de cârlig.

Un pic incomplet

Știu - este un exemplu incomplet, dar pentru un articol de lungă durată și un subiect complex, m-am străduit să fac tot ce pot pentru a afișa API-ul WordPress Rewrite, pentru a discuta despre avantajele utilizării acestuia și pentru a vorbi despre cum poate fi folosit pentru a crea rute URL mai curate.

Adevărul este că este încă oarecum un subiect provocator și este unul cel mai bine realizat prin implementare. Cu toate acestea, această altă componentă a aplicației WordPress, care îi permite să servească drept fundație pentru dezvoltarea aplicațiilor web.


Urmeaza

Cu toate acestea a spus, este timpul să trecem la conceptul de cache.

Sigur, există multe pluginuri de caching disponibile pentru WordPress, dar dacă sunteți dezvoltator, sunteți în căutarea de a construi un nivel de caching nativ și căutați să utilizați API-urile WordPress pentru a face acest lucru. În acest caz, este important să vă familiarizați cu ceea ce este disponibil și cum să faceți acest lucru.

Deci, cu asta a spus, vom întoarce în continuare atenția noastră la API tranzitorii astfel încât să putem trata un pic de caching nativ pe cont propriu și să analizăm modul în care acest lucru poate ajuta mecanismele cache de terță parte să facă aplicațiile noastre chiar mai rapide.

Cod