Redirecționați utilizatorii către paginile personalizate după rol

WordPress este folosit din ce în ce mai mult ca un cadru de aplicații web. Cu acest caz de utilizare vine o grămadă de circumstanțe suplimentare pe care WordPress nu le acoperă. Chiar vrei ca utilizatorii aplicației să vadă administratorul WordPress?

În experiența mea de dezvoltare de aplicații web, răspunsul la această întrebare este de obicei "nu".

Astăzi am să vă învăț cum să redirecționați un utilizator pe baza rolului pe o pagină particularizată în WordPress.


Noțiuni de bază

Să începem acest lucru prin construirea unui plugin. Vreți acest lucru într-un plugin, deoarece este posibil să schimbați designul temei și doriți totuși funcția de redirecționare. Orice funcționalitate pe care doriți să o trăiți după actualul design tematic ar trebui să fie într-un plugin.

Creați un nou dosar de plugin în dvs. wp-content / plugins directorul numit "cm-redirect-cu-rol"și adăugați un fișier numit cm-redirect-by-role.php. În acest fișier vom adăuga antetul de bază al pluginului WordPress văzut mai jos.

Acum că aveți un plugin pornit să aruncăm o privire la modul în care funcționează login-ul utilizatorului.


Conectarea fluxului de utilizatori

Punctul implicit pe care un utilizator îl poate conecta la site-ul dvs. WordPress este via http://yoursite.com/wp-login.php. Când vă conectați la un site din acea locație, site-ul vă trimite la tabloul de bord al administratorului WordPress.

Aceasta înseamnă că administratorul WordPress începe să funcționeze și trebuie să utilizați o acțiune de administrare pentru a prinde utilizatorul. Întotdeauna am cârlig admin_init de acțiune, deoarece rulează suficient de târziu că aveți acces la datele utilizatorului, dar nu atât de târziu încât utilizatorul va vedea ceva pe tabloul de bord.

Utilizarea admin_init acțiune înseamnă că, chiar dacă aceștia sunt deja logați și încearcă să acceseze administratorul WordPress, ei vor fi redirecționați.

Acum, să aruncăm o privire la codul pe care îl vom folosi. Pentru exemplul nostru, vom presupune că vrem să redirecționăm toți abonații, dar acest lucru va funcționa cu orice rol standard sau personalizat în WordPress.

/ ** * Redirecționează utilizatorii pe baza rolului lor * * @ din 1.0 * @author SFNdesign, Curtis McHale * * @used wp_get_current_user () Returnează un obiect WP_User pentru utilizatorul curent * @used wp_redirect () Redirecționează utilizatorul la adresa URL specificată * / funcția cm_redirect_users_by_role () $ current_user = wp_get_current_user (); $ role_name = $ current_user-> roluri [0]; dacă ("abonat" === $ nume_culimitat) wp_redirect ("http://yoursite.com/dashboard");  // if // cm_redirect_users_by_role add_action ('admin_init', 'cm_redirect_users_by_role');

Incepem acest proces prin obtinerea obiectului obisnuit al utilizatorului wp_get_current_user (). Din aceasta primim numele rolului nostru și îl atribuim $ ROLE_NAME variabil.

Apoi verificăm dacă $ ROLE_NAME se potrivește cu rolul pe care dorim să-l redirecționăm. Dacă o vom folosi wp_redirect pentru a trimite utilizatorul la locația noastră de alegere.

În timp ce acest lucru va funcționa mai avem încă o piesă pe care să o adăugăm.


AJAX este în siguranță

Când efectuați apeluri AJAX în WordPress, trebuie să apelați întotdeauna fișierul de rutare WordPress AJAX care se află în interiorul administratorului WordPress. Dacă lăsăm codul nostru ca și cum orice apel AJAX făcut de rolurile noastre de potrivire va eșua, deoarece se va întâlni cu condiționatul nostru și va fi redirecționat.

Pentru a repara că trebuie să verificăm dacă facem în prezent un apel AJAX și, dacă nu, să ignorăm verificarea rolurilor.

funcția cm_redirect_users_by_role () if (! definit ('DOING_AJAX')) $ current_user = wp_get_current_user (); $ role_name = $ current_user-> roluri [0]; dacă ("abonat" === $ nume_culimitat) wp_redirect ("http://yoursite.com/dashboard");  // dacă $ nume_curență // dacă DOING_AJAX // cm_redirect_users_by_role add_action ('admin_init', 'cm_redirect_users_by_role');

Acum avem funcția de redirecționare înfășurată într-o verificare pentru DOING_AJAX constant. Dacă este definită, executăm un apel AJAX și dorim să ignorăm codul de redirecționare.


Concluzie

Asta este acum că putem redirecționa utilizatorii pe baza rolului lor într-o locație personalizată pe care o alegem. Am putea chiar să redirecționăm utilizatorii cu roluri diferite către pagini diferite dacă vrem.

Tot ce trebuie să facem este să adăugăm oa doua condiție pentru a se potrivi celui de-al doilea rol și a stabili locul în care vrem să redirecționăm.

Cod