Rolul și capabilitățile WordPress construirea unei interfețe de administrare

Acesta este un tutorial în patru părți care acoperă tema utilizatorilor, rolurilor și capabilităților WordPress. Seria va acoperi arhitectura și designul rolurilor utilizatorilor în WordPress; evidențiați cele mai importante funcții pentru interacțiunea cu utilizatorii și gestionarea rolurilor și a capacităților; iar în ultimele două articole vom construi un exemplu din viața reală care să demonstreze utilitatea acestui API.


Introducere

În ultimul tutorial, am construit un exemplu din viața reală utilizând sistemul rolurilor și capabilităților WordPress. Sistemul este încapsulat într-o singură clasă; și poate fi utilizat prin inițializarea clasei și a parametrilor de trecere la ea. Parametrii sunt matricea ID-urilor utilizatorilor, un alt set de nume de roluri; precum și un switch pentru a permite accesul tuturor utilizatorilor. În practică, doriți ca administratorul WordPress să poată schimba acești parametri; și, prin urmare, de control care utilizatorii au un "client_dashboard"acces.

În acest tutorial, vom construi o interfață care va da Administratorului posibilitatea de a inițializa automat clasa noastră și de ao alimenta cu datele adecvate. Interfața va permite administratorului să selecteze roluri, utilizatori; sau optați pentru accesul complet.

Codul acestui nou tutorial este disponibil în același depozit Github. Pentru a accesa codul anterior, navigați la prima comisie a depozitului. Am decis să păstrați codul fără licență, astfel că sunteți liber să îl utilizați și să îl acordați licenței după cum doriți.


De ce avem nevoie de o interfață?

Spre deosebire de utilizatori, WordPress nu oferă nicio interfață pentru roluri. Nu puteți adăuga, elimina sau modifica roluri sau capabilități existente fără ajutorul unui plugin de la o terță parte. Puteți, totuși, să aveți o listă a rolurilor existente în blogul dvs. din lista drop-down a selecției rolurilor atunci când editați un profil de utilizator existent. Interfața vă limitează selectarea unui singur rol pentru un anumit utilizator. De asemenea, nu puteți să atribuiți capabilități utilizatorilor cu interfața implicită pe care o are WordPress.

Din acest motiv, este important ca pluginul să furnizeze interfața necesară pentru a configura capabilitățile de acces ale utilizatorului. Utilizatorii pluginului dvs. nu ar trebui să se bazeze pe un plugin extern terță parte. În funcție de sofisticarea utilizatorilor dvs. și de cunoștințele lor despre platforma WordPress, aceștia pot dori:

  • Permite accesul tuturor utilizatorilor.
  • Limitați accesul la anumiți utilizatori.
  • Limitați accesul la unul sau mai multe roluri.
  • O combinație de utilizatori și roluri.

Dacă sunteți puțin confuz, aici vorbim despre un plugin care are două tablouri de bord: Unul pentru administratorul blogului, care are funcții și setări specifice administratorului; și un altul pentru utilizatorii selectați, care au caracteristici și setări limitate. Deci acest exemplu nu se aplică tuturor plugin-urilor de acolo; dar numai cele care necesită acces de administrator și client.

Pentru aceasta, vom avea două interfețe diferite: unul pentru selectarea rolurilor și altul pentru selectarea utilizatorilor. Pentru selectarea rolurilor, trebuie să construim o interfață personalizată deoarece WordPress nu are o interfață vizuală pentru ele. Pentru selecția de utilizatori, putem folosi paginile de profil deja existente prin adăugarea de câmpuri personalizate suplimentare.


Construirea panoului de selectare a rolurilor

WordPress vine cu un număr mic de roluri predefinite: Administrator, Autor, Contributor, Editor și Abonat. Utilizatorii familiarizați cu WordPress își pot adăuga propriile roluri pentru a-și clasifica și gestiona utilizatorii. Din acest motiv, interfața noastră ar trebui să aducă toate rolurile din site și să ofere opțiunea de a alege care dintre ele să autorizeze accesul clientului. De asemenea, am profitat de ocazia de a lipi comutatorul "tot" în aceeași interfață. Verificarea "tuturor" va suprascrie alte setări.

Utilizarea API-ului pentru setări WordPress

Pentru a construi interfața, vom folosi API-ul de setări WordPress și vom crea o funcție personalizată care va afișa casetele de selectare. Următorul cod este utilizat pentru a înregistra "wptuts_settings"formular de setări.Înregistrați, de asemenea, o secțiune în interiorul acestei forme și un câmp în interiorul secțiunii.

 // Înregistrează un nou set de setări add_action ('admin_init', 'wptuts_settings_form'); funcția wptuts_settings_form () // Înregistrați un nou formular de setări register_setting ('wptuts_settings', 'wptuts_settings'); // Înregistrați o nouă secțiune add_settings_section ('wptuts_settings', 'General Settings', 'wptuts_section', 'general_settings_form', 'Client Access'); // Înregistrați un nou câmp add_settings_field ('client_roles', 'Client Roles', 'wptuts_roles_check', 'general_settings_form', 'wptuts_settings', array ('client_roles', 'wptuts_settings'));  funcția wptuts_section () return null; 

Functia add_settings_section () necesită o funcție ca al treilea parametru care returnează descrierea secțiunii. Pentru a păstra lucrurile simple, am trecut o funcție care întoarce nulă (sau nimic).

Functia add_settings_field () acceptă un ID de câmp, o etichetă, o funcție, secțiunea și formularul pentru a lega câmpul; și argumentul pentru a trece la funcția de câmp. Funcția de câmp va afișa codul HTML al câmpului.

API-ul de setări WordPress este folosit pentru a crea formulare care salvează automat conținutul lor într-o opțiune WordPress. Opțiunea este "wptuts_settings", și este o matrice care are setările diferite ale plugin-ului nostru Pentru a face WordPress să recunoască câmpurile formularului nostru, trebuie să le înregistrăm mai întâi folosind funcțiile menționate mai sus și să atribuim numele corect pentru fiecare câmp. să aveți un nume în formular wptuts [FIELD_NAME].

În cazul nostru, avem un număr imprevizibil de roluri; și, astfel, un număr imprevizibil de casete de selectare. Nu are sens să creați și să înregistrați un câmp pentru fiecare rol. Din fericire, HTML suporta elemente de matrice; așa că numim căsuțele noastre de bifare wptuts [FIELD_NAME] [role_1], wptuts [FIELD_NAME] [role_2], wptuts [FIELD_NAME] [role_n]... WordPress va recunoaște acest element al matricei HTML și îl va salva ca o matrice PHP.

Mai jos este conținutul mesajului "wptuts_settings"matrice când"toate","autor", și "abonat"sunt selectate casetele de selectare.

 'wptuts_settings' => array 'client_roles' => array 'all' => șir 'on' (length = 2) 'author' => string 'on' ( lungime = 2)

Efectuarea codului HTML al câmpului

Funcția legată de câmp este "wptuts_roles_check"Acceptă o matrice care are ID-ul setărilor și numele câmpului, ceea ce face ca funcția noastră să fie reutilizabilă în alte câmpuri.Puteți trece peste acest parametru și codul hardcorei ID-ul setărilor și numele câmpului în funcție.

Funcția va trece printr-o serie de nume de roluri returnate de "$ Wp_roles-> get_names ()"De asemenea, acesta va dezactiva rolul de administrator și va adăuga o casetă de selectare suplimentară" toate ".

 / ** * generează căsuțele de roluri din formularul * * @ param array $ param * / funcția wptuts_roles_check ($ param) // Lista rolurilor $ settings = get_option ($ param [1]); dacă (isset ($ setări [$ param [0]])) $ val = $ setări [$ param [0]];  altfel $ val = "; // Generarea codului HTML // Obținerea rolurilor WP globale $ wp_roles; $ roles = $ wp_roles-> get_names (); unset ($ roluri ['administrator']); dacă ($ val ['all'] === 'pe') echo ' Toate
„; altceva echo ' Toate
„; foreach ($ roluri ca $ cheie => valoare $) if ($ val [$ key] === 'pe')) echo ' ". $ valoare. '
„; altceva echo ' ". $ valoare. '
„;

Adăugarea câmpurilor de profil personalizat

Așa cum este cuprins în primul tutorial din această serie, utilizatorii pot avea asociate date suplimentare cu acestea sub formă de perechi cheie / valoare. Am acoperit funcțiile de adăugare, actualizare și eliminare a metadatelor utilizatorilor în al doilea tutorial. În această parte, vom vedea cum să adăugăm o secțiune la fiecare pagină de profil a utilizatorului și să actualizăm în consecință metadatele utilizatorului.

Pasul 1 Conectarea la profilul utilizatorului

WordPress oferă patru acțiuni pentru a accesa pagina de profil a utilizatorului. Două acțiuni pentru a adăuga câmpuri noi în pagina de editare; și alte două acțiuni pentru a face față solicitării POST HTTP. Diferența dintre "show_user_profile"acțiune și"edit_user_profile"acțiunea este că aceasta din urmă trece a WP_User obiect pentru editarea utilizatorului. Cu toate acestea, diferența dintre celelalte două acțiuni nu este clară.

 / ** * Metabox user hooks * / funcția privată metabox_user () // Afișați metabox add_action ('show_user_profile', array (& $ this, 'display_metabox')); add_action ('edit_user_profile', array (& $ this, 'display_metabox')); // Salvează actualizarea add_action ('personal_options_update', array (& $ this, 'update_metabox')); add_action ('edit_user_profile_update', array (& $ this, 'update_metabox')); 

Pasul 2 Afișarea câmpului personalizat

Spre deosebire de API-ul Setări, nu există restricții sau cerințe față de codul HTML pe care funcția le emite. WordPress nu face salvarea metadatelor, deci aveți libertatea de a vă descurca așa cum doriți.

 / ** * Afișați câmpul personalizat * * @ param obiect $ user * / funcția publică display_metabox ($ user) $ user_meta = get_user_meta ($ user-> ID, 'wptuts_client', true); dacă ($ user_meta) $ checked = 'checked';  altceva $ checked = "; print <<
Wptuts + Client
Activați accesul la Tabloul de bord al clientului Plugin Wptuts +
formă;

Pasul 3 Salvarea câmpurilor utilizator personalizate

Așa cum am menționat mai devreme, trebuie să ne ocupăm de economisirea unei funcții diferite. Această funcție este apelată atunci când utilizatorul apasă butonul "Update Profile" și formularul HTML este trimis într-o cerere POST.

 / ** * Actualizați utilizatorul Meta-data * * @param integer $ user_id * / funcția publică update_metabox ($ user_id) if (isset ($ _ POST ['wptuts_client']) && $ _POST ['wptuts_client'] === 'pe') $ checked = true;  altceva $ checked = false;  update_user_meta ($ user_id, 'wptuts_client', $ verificat); 

Actualizarea clasei de inițializare

În cele din urmă, trebuie să ne actualizăm clasa. În tutorialul anterior, clasa noastră este construită cu trei parametri. Nu avem nevoie de acești parametri acum; iar funcția noastră ar trebui să le aducă de la datele salvate de interfețe.

Avem două surse de date pentru a prelua:wptuts_settings"și metadatele utilizatorului. Sperăm că extragerea metadatelor a fost făcută destul de ușor cu funcția"get_users ()"care returnează exact ceea ce avem nevoie (o serie de ID-uri de utilizator) prin specificarea meta-cheie și a valorii pe care utilizatorul ar trebui să o aibă.

 / ** * Setați entitățile de permisiune * * @param boolean $ all * @param array $ roluri * @param array $ users * / set privat set_entities () $ settings = get_option ('wptuts_settings'); $ roles = setări $ ['client_roles']; // ALL rulează dacă (isset ($ roles ['all']) && $ roluri ['all'] === 'on') $ this-> all = true;  altceva $ this-> all = false;  // Rulează rolurile $ this-> roles = $ roles; unset ($ this-> roluri [ 'toate']); // Utilizarea regulilor $ this-> users = get_users (array ('meta_key' => 'wptuts_client', 'meta_value' => true, 'fields' => 'ID')); 

Concluzie

Asta e! Acum avem o interfață în adminul WordPress pentru roluri și capabilități. Spuneți-ne în comentariile de mai jos care sunt gândurile dvs. privind rolurile și capabilitățile și ce funcții ați putea adăuga la clasa și interfața pe care am creat-o în această serie.

Cod