Cum de a dezvolta un site de membru cu WordPress Partea 3

Ce veți crea

Anterior, în seria am abordat modul de personalizare a formularelor de înregistrare și de înregistrare WordPress. Apoi am adăugat câteva câmpuri personalizate în formularul nostru de înregistrare. Astăzi, în cea de-a treia și ultima parte a acestei serii, vom aborda modul în care puteți dezvolta o secțiune "contul meu" pentru utilizatorii site-ului dvs. prin care utilizatorii își pot edita informațiile despre profil. 

Configurare pagina

Primul lucru pe care dorim să-l facem este să creați un șablon de pagină pentru a găzdui conținutul nostru. Îmi place să prefixez șabloanele paginii mele cu cuvântul "șablon". Deci, fișierul meu se numește template-user-profile.php, iar deschiderea PHP arată astfel: 

Am salvat asta în rădăcina directorului meu tematic. Dacă nu sunteți familiarizați cu șabloanele de pagini WordPress vă sugerăm să citiți link-ul de mai sus. Ele sunt extrem de la îndemână.

Acum hai să mergem spre sfârșitul WordPress și să facem o pagină numită "profil", iar în Atribute de pagină meta-box-ul atribuie șablonul de pagină nou creat. Odată ce ați publicat această pagină, ar trebui să aveți o pagină goală în partea din față: http: // yourdomain / profil. 

Acum, pentru a injecta ceva în pagina noastră. Vrem ca structura să fie conținutul paginii (adică ceea ce este scris în WordPress WYSIWYG) și apoi formularul de profil care urmează. 

Adesea este util să obțineți codul din pagina.php și să îl utilizați ca punct de pornire pentru șabloanele dvs. de pagină. Acest cod diferă puțin în funcție de tema dvs., dar va conține cel mai probabil o buclă care scutește un anumit conținut al paginii. Partea de conținut este extrasă în mod normal utilizând funcția WordPress get_template_part (). Chiar dedesubt unde conținutul a fost preluat, să inserăm formularul HTML. Deci, pentru a recapitulare:

  1. Copiați și inserați codul din pagina.php în Șablonul de pagină.
  2. Găsiți unde se transmite conținutul.
  3. Sub acest lucru, introduceți următorul cod și apoi vom trece prin el:

Nu se întâmplă nimic aici: formularul utilizează marcajul Bootstrap deoarece tema noastră este construită pe Bootstrap. Trebuie notat că formularul este trimis prin metoda POST și am inclus un wp_nonce_field - acesta este un tip de jeton de securitate care ajută la prevenirea atacurilor rău intenționate. Dacă nu sunteți familiarizați cu noncesurile WordPress, aș sugera să citiți acest articol. 

Preluarea datelor

Cu asta, ar trebui să aveți un formular pe partea din față a site-ului, dar nu face multe. Vrem să afișeze datele pe care le avem pentru utilizatorul conectat. Este posibil să fi observat că atributele de valoare din formularul nostru echivă unele PHP. 

value =“Nume; ?>“

Chiar acum $ user_info obiect nu există deoarece nu am scris încă codul, deci să începem acolo. Inserați următorul cod înainte de formularul nostru în template-user-profile.php.

Folosind câteva funcții native ale WordPress, acesta primește ID-ul curent al utilizatorului și cu ajutorul căruia putem obține datele utilizatorului. Acesta este stocat într-un obiect numit $ user_info, și așa cum am demonstrat mai sus, putem recupera datele de utilizator destul de ușor. Pentru a vedea toate datele stocate în obiectul respectiv, puteți rula a var_dump ca astfel: . Acest lucru poate fi util pentru depanare sau doar pentru a vedea ce puteți accesa. 

Prelucrarea datelor

Există o singură piesă finală a puzzle-ului, și asta pentru a procesa datele, permițând utilizatorilor să își editeze profilurile. Pentru a păstra lucrurile organizate, am pus codul de membru într-un fișier numit apropriely numit membership.php. Aceasta este în lib director și a fost inclus în fișierul nostru functions.php. Odată ce ați făcut acest lucru, deschideți noul fișier membership.php creat într-un editor de cod și să realizăm funcția care va procesa datele utilizatorilor. 

Mai întâi, hai să mergem rapid prin logică. Atunci când butonul de trimitere este lovit, vrem să verificăm dacă câmpul nonce a fost trimis - acesta verifică dacă datele provin din locul potrivit. 

Dacă această condiție este îndeplinită, dorim să obținem ID-ul curent al utilizatorului, deoarece acesta va fi necesar pentru stocarea datelor. Apoi vrem să aranjăm datele noastre într-o structură WordPress place - în acest caz este o matrice cu chei specifice. Înainte de salvarea datelor, dorim să o validăm și să o dezinfectăm. În cele din urmă, dorim să afișăm mesaje utilizatorului, fie de succes, fie de erori.

Și codul pentru toate care arată cam așa:

 sanitize_text_field ($ _POST ['first_name']), 'last_name' => sanitize_text_field ($ _POST ['last_name']), 'user_email' => sanitize_email $ _POST ['twitter_name']), 'user_pass' => $ _POST ['pass1']); if (! empty ($ user_data ['user_pass'])) // Validați parolele pentru a verifica dacă acestea sunt identice. dacă (strcmp ($ user_data ['user_pass'], $ _POST ['pass2'])! == 0) wp_redirect ('? password-error = true'); Ieșire;  altfel // Dacă câmpurile de parolă nu sunt setate, nu se salvează. dezactivat ($ user_data ['user_pass']);  // Salvați valorile la postare. foreach ($ user_data ca $ cheie => valoare $) $ results = "; // http://codex.wordpress.org/Function_Reference/wp_update_user dacă ($ key == 'twitter_name') $ results = update_user_meta ($ ($ user_id, $ key, $ value); unset ($ user_data ['twitter_name']); elseif ($ key == 'user_pass') wp_set_password ($ user_data ['user_pass'], $ user_id) [$ user_pass]]; altfel // Salvați valorile rămase $ results = wp_update_user (array ('ID' => $ user_id, $ key => $ value) ) wp_redirect ('? profile-updated = true'); wp_redirect ('? profile-updated = false');

Acum s-ar putea să observați că datele sunt salvate folosind trei funcții WordPress diferite:

  • update_user_meta () pentru numele de Twitter
  • wp_set_password () pentru parola
  • wp_update_user () pentru datele rămase

Și aveți dreptate să întrebați acest lucru. Practic metadatele personalizate (numele Twitter) trebuie prelucrate folosind funcția relativă și nu funcția generală de actualizare a utilizatorului. În ceea ce privește parola, în timp ce se poate lucra cu wp_update_user (), Am avut probleme cu ea și prefer să folosesc această metodă. Amintiți-vă acest lucru este doar un ghid, și adesea codul vizează demonstrarea diferitelor metode pentru a vă îndeplini cerințele. 

Bine, deci avem funcția noastră de a procesa datele, dar nu este chemată nicăieri. La sfârșitul funcției noastre puteți vedea că există o acțiune asociată cu aceasta. Deci, pentru a numi această funcție, trebuie să folosim WordPress cu condiția: do_action () ;. Deci, lipiți această linie deasupra formularului dvs. în șablonul de pagină de profil Utilizat pe care l-am creat mai devreme:

Cu faptul că în locul nostru, atunci când prezentăm formularul nostru, acesta ar trebui să treacă prin funcția noastră și să proceseze datele. 

Mesaje de eroare și de succes

Formularul nostru de profil ar trebui să salveze sau să respingă datele acum. Poate că cele două parole nu erau la fel și nu au salvat. Nu există mesaje care să ofere feedback utilizatorilor. Să-i salvăm pe utilizatori niște necazuri și să le dea niște mesaje. 

În a noastră tutsplus_process_user_profile () poate că ați observat că atașează diferite adrese de interogare adresei URL în funcție de rezultatul procesării. Deci, dacă totul este salvat și reușit, atunci URL-ul nostru va fi atașat ?profil actualizat = true-, iar acestea variază în funcție de rezultate. Ceea ce trebuie să facem este să declanșăm un mesaj bazat pe aceste răspunsuri. 

Mai jos am folosit un filtru pentru a apuca de conținut, și prin magia lui $ _GET putem verifica parametrii și vom scuipa ceea ce avem nevoie. 

Bine, nu chiar acolo - folosim o funcție numită tutsplus_get_message_markup () deasupra, dar nu l-am definit încă. Este nevoie de doi parametri:

  • un șir: mesajul de afișat
  • un șir de caractere: severitatea alertei pe care trebuie să o afișați în funcție de Bootstrap  

Deci, să definim noi tutsplus_get_message_markup () funcţie:

„; $ output = '„; $ output = '

". $ mesaj. '

„; $ output = '
„; returnați outputul $;

Grozav. Membrii noștri pot vedea dacă datele lor sunt salvate sau nu. 

Credit suplimentar

Deci, acum avem un prototip de lucru pentru un site de membru. O mare parte din această funcționalitate este livrată cu WordPress, dar am redactat-o ​​și am modificat-o pentru ao face o experiență mai bună pentru utilizatorii noștri. Deci, hai să ne punem doar punctul nostru de vedere și să trecem prin T pentru a îmbunătăți experiența doar că puțin mai mult. 

În primul rând, vrem să păstrați utilizatorii care nu sunt conectați să nu poată accesa pagina profilului. O redirecționare simplă la pagina de pornire va face. Am facut o functie care face asta, si o numesc pe paginile pe care vreau sa le acces doar de utilizatorii conectati. 

Iată funcția, care este plasată în membership.php: 

Acum putem numi funcția în partea de sus a șablonului de pagină Profil utilizator. 

În continuare vrem să păstrăm utilizatorii - bine, abonați-din zona administratorului. Iar peste asta, hai să mergem eliminați bara de administrare pentru utilizatorii conectați. Din nou, să punem acest lucru în membrul nostru membership.php.

Și, în sfârșit, nu este foarte ușor să navighezi pe ecranele de conectare / deconectare. Să adăugăm câteva navigare specifică utilizatorului. Ceea ce am făcut este să creez o funcție care să emită codul corespunzător, iar acest lucru este apoi apelat în șabloanele / header.php unde este redată navigația principală. 

„; dacă (is_user_logged_in ()) echo '
  • „; echo ". $ welcome_message. ''; echo "
  • „; echo "
  • „; echo ". __ ("Deconectați-vă", "salvie"). ''; echo "
  • „; altceva echo '
  • „; echo ". __ ("Log in", "salvie"). ''; echo "
  • „; echo '„;

    rezumat

    WordPress este o bază uimitoare pentru o cerere de membru. Are deja atâtea funcționalități asociate cu acest tip de aplicație. În plus, cei de la WordPress au făcut destul de ușor să creeze evenimente și să filtreze conținutul, astfel încât să putem extinde ceea ce există deja. 

    Sper că acest lucru v-a oferit metode, idei și cunoștințe pentru a vă dezvolta propriile site-uri de membru. Acesta nu este în nici un caz un ghid complet pe această temă, ci mai degrabă servește drept fundație.

    Orice feedback este binevenit și voi face tot ce pot pentru a răspunde la orice întrebări din comentarii.

    Lucruri de notat

    Rețineți: dacă descărcați codul din depozitul GitHub, acesta include toate fișierele pentru a vă crea tema. Ideea este că puteți să luați repo-ul și să conduceți comenzile Gulp și Bower necesare și veți fi plecați! Dacă doriți doar fișierele care conțin cod specific acestei serii, fișierele sunt enumerate mai jos: 

    • toate fișierele din directorul de administrare  
    • lib / admin.php 
    • lib / membership.php
    • template-user-profile.php  
    Cod