În cadrul acestei serii, am analizat modul în care WordPress poate servi drept fundație pentru dezvoltarea aplicațiilor web.
Chestia este că până acum nu am analizat caracteristicile WordPress care contribuie cu adevărat la construirea de aplicații web. În schimb, am petrecut timp uitându-se la modul în care WordPress servește mai degrabă ca fundație decât ca un cadru, și ne-am uitat la modul în care WordPress este organizat în comparație cu multe dintre cadrele moderne disponibile.
Mai exact, am analizat modelul de design bazat pe evenimente, spre deosebire de modelul popular de design-view-controller (și variante ale acestuia) și de modul în care acesta arată în contextul WordPress.
Prin aceasta, ne-am străduit să regândim arhitectura aplicațiilor și modul în care structura lor în contextul WordPress ne ajută să obținem un model conceptual mai bun pentru modul în care lucrurile se potrivesc împreună în WordPress și cum să profite de sistemul de cârlige - și filtrele - și modul în care ele influențează diferite puncte în timpul ciclului de viață al paginilor WordPress.
Desi acest lucru merita o discutie mai putin, trebuie sa aruncam o privire la facilitatile pe care WordPress le ofera in afara casetei pentru a intelege pe deplin caracteristicile si API-urile cu care trebuie sa lucram inainte de a arunca o privire la Cum pentru a lucra cu ei.
În următoarele două articole, vom face exact asta.
Când vă gândiți la componentele unei aplicații web, este posibil să apară câteva lucruri în minte. Adică, în afară de arhitectura obișnuită a bazei de date, a middleware-ului și a stratului de prezentare, există, de asemenea, următoarele caracteristici:
Deși această listă nu este deloc comprehensivă, ea lovește notele cele mai importante ale a ceea ce se întâmplă în construirea unei aplicații web standard (desigur, dacă există puncte care sunt ratate, nu ezitați să le menționați în comentarii).
Și nu - acest lucru nu este prescriptiv. Uneori, aplicațiile web nu vor avea gestionarea utilizatorilor, uneori utilizatorii nu vor avea roluri, poate că nu veți avea nevoie de cache și așa mai departe.
Dar punctul nu este de a face un caz pentru toate lucrurile de care aveți nevoie. În schimb, este vorba de a face un caz pentru lucrurile care sunt disponibile ar trebui să aveți nevoie de ele.
Deci, cu asta a spus, să aruncăm o privire la ceea ce oferă WordPress în modul de gestionare a utilizatorilor, permisiuni, funcționalități de e-mail și gestionarea sesiunilor.
Oricine a folosit WordPress - chiar dacă este doar pentru blogging sau pentru gestionarea conținutului de bază - este familiarizat cu sistemul de bază de utilizator. Adică, creați un nume de utilizator, o parolă și apoi completați profilul dvs. cât doriți.
Mai mult, dezvoltatorii mai experimentați sunt familiarizați cu ideile de roluri și capabilități. Mi-ar face chiar să spun că cei care folosesc WordPress sunt familiarizați cu sistemul, chiar dacă nu au aruncat niciodată o privire la Codex sau nu s-au întâlnit cu scrierea oricărui cod bazat pe utilizator.
Dar ideea generală este foarte simplă: utilizatorii reprezintă un profil individual pentru un cont în WordPress. Rolul lor este indicat de ceea ce au fost atribuite în timpul creării contului.
Aceste roluri includ:
Din nou, majoritatea dintre noi care am lucrat cu WordPress sunt familiarizați cu aceste roluri, nu? Dar cum se potrivesc capabilitățile în imagine?
Pur și simplu, capabilitățile sunt ceea ce oferă utilizatorilor anumite permisiuni în întreaga aplicație WordPress, precum și ceea ce le restricționează din anumite zone ale aplicației. Acest lucru este relativ bine documentat în Cod.
Dar aici este chestia: dacă construiți o aplicație pe WordPress, API-urile disponibile fac posibilă blocarea utilizatorilor din zonele personalizate pe care le-ați creat pe baza rolurilor și capabilităților lor.
În primul rând, să spunem că într-un anumit moment, în timp ce lucrați la aplicația dvs. web, doriți să puteți oferi utilizatorului posibilitatea de a vă înregistra sau de a vă înscrie dintr-un formular de înscriere personalizat (spre deosebire de metoda standard de creare a contului de utilizator în backend-ul așa cum este arătat mai sus).
Acest lucru se poate face prin crearea unui șablon cu un formular și apoi prin citirea datelor postale.
De fapt, poate fi la fel de simplu ca și captarea adresei de e-mail a utilizatorului. Menționez acest lucru deoarece, deși numele de utilizator sunt frumos și distractiv, e-mailurile tind să fie unice pentru un individ, astfel încât să faciliteze verificarea erorilor.
Deci, pașii pentru a face acest lucru ar fi:
Relativ direct înainte, nu? Desigur, acest lucru înseamnă că poți genera o parolă pentru utilizator după crearea contului. Din fericire, există un API pentru asta.
Iată un exemplu de creare în mod programat a unui utilizator pe baza unei adrese de e-mail specificate (în timp ce se generează automat o parolă).
dacă (null == username_exists ($ email_address)) $ password = wp_generate_password (12, false); $ user_id = wp_create_user ($ email_address, $ parola, $ email_address); wp_update_user (array ('ID' => $ user_id, 'porecla' => $ email_address);); altceva // Numele de utilizator există deja, deci gestionați acest lucru în consecință ...
După aceasta, trebuie să creați o instanță nouă WP_User
.
$ user = nou utilizator WP_ ($ user_id);
Aceasta ne va permite să stabilim roluri pentru utilizatorul dat.
În cele din urmă, este timpul să stabiliți ce rol și set de capabilități le veți aloca utilizatorului.
Pe de o parte, puteți codifica greu aceste valori pe baza opțiunilor oferite de WordPress. Adevărul este că puteți crea chiar și roluri personalizate și capabilități. Deocamdată, acest lucru se află în afara domeniului de aplicare al articolului; cu toate acestea, este posibil să o vizităm într-o serie viitoare.
Deci, să spunem că vrem ca toți utilizatorii care se înscriu în prezent să li se dea abonat rol. Puteți vedea ce set de capabilități vor fi acordate în acest articol Codex.
Stabilirea unui rol este trivial:
$ user-> set_role ("contribuitor");
În acest moment, ați creat cu succes un nou utilizator în cadrul aplicației WordPress programabil fără a trebui să utilizați niciuna dintre funcțiile administrative prestabilite.
Pur și simplu conectați-l la propriul dvs. șablon, validați, dezinfectați și verificați intrarea $ _POST
date și veți fi gata să plecați.
Codul complet arată astfel:
dacă (null == username_exists ($ email_address)) // Generați parola și creați userul $ password = wp_generate_password (12, false); $ user_id = wp_create_user ($ email_address, $ parola, $ email_address); // Setați porecla wp_update_user (array ('ID' => $ user_id, 'nickname' => $ email_address);); // Setați rolul $ user = new WP_User ($ user_id); $ user-> set_role ("contribuitor"); altceva // Utilizatorul există deja // end if / else
Nu e rău, corect?
Dar crearea unui utilizator și apoi salvarea efectivă a informațiilor în baza de date în doar jumătate din acesta, corect?
Odată ce utilizatorul semnează și este autentificat, probabil că veți dori să restricționați conținutul în funcție de rolul lor. Deci, aceasta ridică întrebarea: Odată ce un utilizator este conectat, cum putem prelua rolul unui utilizator?
Din fericire, API-ul WordPress face acest lucru relativ ușor:
Vom avea nevoie să profităm de wp_get_current_user ()
funcția, iar apoi vom avea nevoie de o instanță a WP_User
obiect folosind ID-ul curent al utilizatorului, după care putem să aruncăm o privire asupra capabilităților utilizatorului.
Uitați-vă la codul de mai jos:
// Obțineți o instanță a utilizatorului curent $ user_id = wp_get_current_user () -> ID; $ user = nou utilizator WP_ ($ user_id);
Nu e rău, corect?
Acest lucru face foarte ușor pentru a scrie cod condițional, cum ar fi:
// Aceasta va tipări capabilitățile utilizatorului print_r ($ user-> wp_capabilities); // care, la rândul său, vă va permite să efectuați un cec astfel: dacă ('1' === $ user-> wp_capabilities ['subscriber']) // Avem un abonat
Acolo este o modalitate alternativă de a face acest lucru, deși:
global $ current_user; get_currentuserinfo (); dacă (0 === $ current_user-> user_level) // Avem un abonat
Dar aceasta ridică întrebarea de unde a provenit de la zero? Verificați exact asta.
Diferențele dintre cele două abordări depind de modul în care doriți să fie codul dvs. orientat pe obiect.
Tind să fiu mai puțin fan de utilizare global
atunci când există o abordare orientată pe obiecte (cum este cazul primului exemplu); cu toate acestea, al doilea exemplu oferă o soluție relativ simplă. Alegerea ta.
Oricum, odată ce puteți verifica în mod condiționat rolul contului unui utilizator, puteți să-i restricționați în anumite zone ale aplicației.
Ai dreptate: cel puțin nevoia utilizatorului de a primi e-mailuri atunci când au fost create conturile și trebuie să poată primi e-mailuri ori de câte ori ceva despre contul lor sa schimbat.
Din nou, WordPress oferă un API care face acest lucru foarte ușor, însă poate fi extins și dincolo de acțiuni simple, cum ar fi schimbarea informațiilor despre profil ale unui utilizator.
De fapt, având în vedere faptul că WordPress are un sistem bogat de evenimente, puteți să vă conectați eventual la orice număr de evenimente și să trimiteți e-mailuri când orice se întâmplă. Acest lucru este în mod evident suprasolicitat, dar arată cât de puternic este API.
Deci, în următoarea secțiune, vom examina API-ul de e-mail WordPress și modul în care poate fi folosit pentru a trimite mesaje despre o anumită activitate, precum și despre modul în care poate fi cuplat în alte funcții ale aplicației.