Ne-am uitat la modul de a crea un simplu sistem CRM în WordPress. În ultima parte a acestei serii, am explorat modul de utilizare a rolurilor pentru a restricționa accesul utilizatorilor la părți ale interfeței de administrare WordPress.
Astăzi vom discuta cum să restricționăm accesul numai la Tipul de postări personalizate de contact utilizând funcțiile personalizate.
În timp ce am redus anterior nivelul de acces pe care îl au utilizatorii noștri WordPress, atribuindu-le unui rol Editor sau Autor, utilizatorii pot gestiona mesajele și comentariile. Niciuna dintre aceste funcții nu este utilă pentru noi, deci trebuie să restrângem accesul în continuare, permițând utilizatorilor desemnați să aibă acces doar la Tipul de mesaje personalizate de contact.
Putem face acest lucru prin:
Înregistrarea capabilităților personalizate ne permite să definim mai târziu ce roluri WordPress au acces la aceste capabilități - de exemplu, dacă un autor poate crea un nou contact.
Să editați fișierul pluginului nostru register_post_type ()
apel apel, înlocuire capability_type => 'postare'
cu urmatoarele:
'capabilități' => array ('edit_others_posts' => 'edit_others_contacts', 'delete_others_posts' => 'delete_others_contacts', 'delete_private_posts' => 'read_private_contacts' ',' edit_published_posts '=>' edit_published_contacts ',' publish_posts '=>' publish_contacts ',' delete_published_posts '=>' delete_published_contacts ' => 'edit_contact', 'read_post' => 'read_contact', 'delete_post' => 'delete_contact', 'map_meta_cap' => true,
Al nostru register_post_type ()
ar trebui să arate acum:
/ ** * Înregistrează un tip de post particularizat numit contact * / function register_custom_post_type () register_post_type ('contact', array ('etichete' => , "nume_menu" => _x ("Persoane de contact", "meniu admin", " tuts-crm ',' add_new '=> _x (' Adăugați noi ',' contact ',' tuts-crm '),' name_admin_bar ' -crm ',' add_new_item '=> __ (' Adăugare contact nou ',' tuts-crm '),' new_item '=> __ ('Edit Contact', 'tuts-crm'), 'view_item' => __ ('View Contact', 'tuts-crm'), 'all_items' => , 'search_items' => __ ('Search Contacts', 'tuts-crm'), 'parent_item_colon' => . "," tuts-crm ")," not_found_in_trash "=> __ (" Nu există contacte găsite în coșul de gunoi "," tuts-crm " false ', public =' false ',' publicly_queryable '=> false, // Capabilități admin' => array (' delete_private_contacts ',' edit_private_posts '=>' edit_private_contacts ',' read_private_posts '=>' read_private_contacts ',' edit_published_posts '=>' edit_published_contacts ',' '=>' edit_contacts ',' delete_posts '=>' delete_contacts ',' edit_post '=>' edit_contact ',' read_post '=>' read_contact ',' delete_post '=>' delete_contact ' adevărul, 'menu_icon' => 'dashicons-businessman', 'menu_position' => 10, 'query_var' => true, 'show_in_menu' => true, 'show_ui' => true, 'supports' => array "," autor "," comentarii ",),));
Aici se întâmplă două lucruri:
capabilități
argument, mapându-le la echivalentele lor Post. Acest lucru asigură că WordPress înțelege exact ce semnifică capabilitățile (adică. edit_contact
se comportă în același mod ca și editează postarea
capabilitate, cu excepția faptului că este vorba de tipul de post personalizat de contact).map_meta_cap
, astfel încât acestea sunt puse în aplicare.Reîncărcați administrația WordPress ca orice utilizator și veți vedea că tipul de postare personalizată pentru contacte a dispărut din meniul de administrare WordPress:
Acest lucru sa întâmplat pentru că acum trebuie să spunem WordPress care roluri au noile noastre capacități de contact (edit_contact
, edit_contacts
, etc).
Utilizarea add_role ()
, putem crea un nou rolu de utilizator WordPress și putem asocia capacitățile noastre de contacte cu acesta. Rolul este stocat în datele WordPress Options, așa că trebuie doar să efectuăm această funcție o dată.
Pentru aceasta, adăugați următoarea funcție sub capătul __construi()
funcția în pluginul nostru:
/ ** * Cârligul de activare pentru a înregistra un nou Role și a atribui funcțiile noastre de contact * / funcția plugin_activation () // Definiți capabilitățile personalizate $ customCaps = array ('edit_others_contacts' => true, 'delete_others_contacts' => true, delete_private_contacts '=> true,' edit_private_contacts '=> true,' read_private_contacts '=> true,' edit_published_contacts '=> true,' publish_contacts '=> true, '=> true,' edit_contact '=> true,' read_contact '=> true,' delete_contact '=> true,' read '=> true,); // Creați rolul CRM și atribuiți capabilitățile personalizate acestuia add_role ('crm', __ ('CRM', 'tuts-crm'), $ customCaps);
Această funcție va adăuga un nou rol numit CRM în WordPress. Utilizatorii alocați acestui rol vor avea acces numai la capabilitățile de contacte. Prin urmare, aceștia vor avea acces numai la Tipul de postări personalizate de contact.
Observați că atribuim și citit
capacitatea acestui rol. Acest lucru este necesar pentru a permite utilizatorilor să editeze profilul lor (nume, parolă etc.). Trebuie să permitem utilizatorilor să facă acest lucru, deoarece atunci când se conectează, WordPress le va redirecționa automat la ecranul Profil.
Dacă nu l-am atribuit citit
capabilitate, acesta este ceea ce s-ar întâmpla atunci când utilizatorul se loghează:
Pentru a ne conduce plugin_activation ()
o dată, să adăugăm următorul cod la sfârșitul fișierului nostru plugin:
register_activation_hook (__FILE__, array (& $ wpTutsCRM, 'plugin_activation'));
Acest lucru spune WordPress că, la activarea plugin-ului, trebuie să apeleze plugin_activation ()
funcționează în interiorul nostru WPTutsCRM
clasă.
Apoi, dezactivați și reactivați Plugin-ul, apoi navigați la Utilizatori> Adăugați noi în interfața de administrare WordPress.
Dacă totul a funcționat cu succes, veți vedea rolul CRM nou care apare în lista derulantă:
Să mergem mai departe și să creăm un nou utilizator numit crm, și conectați-vă ca noul Utilizator. Ar trebui să ne vedem acum Contacte, cu Tablou de bord și Profil ca singurele opțiuni de meniu:
Dacă deconectăm și logăm înapoi ca Administrator, Editor sau Autor de WordPress, veți observa că Tipul de postări personalizate pentru contacte încă lipsește din meniul de administrare WordPress:
Acest lucru se datorează faptului că l-am atribuit doar CRM
Rolul contactului nostru personalizat tip de postare. Prin urmare, toate celelalte roluri de utilizatori nu au încă acces la acest tip de postare.
Pentru a rezolva acest lucru, să atribuim capabilitățile personalizate funcțiilor de administrator și editor, prin adăugarea următorului cod la sfârșitul plugin_activation ()
funcţie:
// Adăugați capabilități personalizate în rolurile Admin și Editor $ roles = array ("administrator", "editor"); foreach ($ roluri ca $ roleName) // Obțineți rolul $ role = get_role ($ roleName); // rolul de control există dacă (is_null ($ role)) continue; // Iterați prin capabilitățile noastre personalizate, adăugându-le // la acest rol dacă sunt activate foreach ($ customCaps ca $ capability => $ enabled) if ($ enabled) // Adăugare capabilitate $ role-> add_cap ($ capacitate);
Aici, iteram prin rolurile pe care vrem să le atribuim capabilitățile personalizate, verificând rolul există. Dacă se întâmplă acest lucru, vom itera apoi prin capabilitățile personalizate pe care le-am definit mai devreme, adăugându-le la rol.
Veți observa că nu am adăugat niciun capabilitate personalizată în rolul autorului; acest lucru se datorează faptului că nu dorim să alocăm toate capabilitățile, deoarece rolul autorului în mod tradițional permite doar accesul la scriere la posturile proprii ale utilizatorului.
Să continuăm să ne construim plugin_activation ()
funcție prin adăugarea unor capacități pentru rolul autorului:
// Adăugați unele dintre capabilitățile noastre personalizate în Rolul autorului $ role = get_role ("autor"); $ role-> add_cap ('edit_contact'); $ role-> add_cap ('edit_contacts'); $ role-> add_cap ('publish_contacts'); $ role-> add_cap ('read_contact'); $ role-> add_cap ('delete_contact'); dezactivat ($ rol);
Întreaga noastră funcție ar trebui să pară acum:
/ ** * Cârligul de activare pentru a înregistra un nou Role și a atribui funcțiile noastre de contact * / funcția plugin_activation () // Definiți capabilitățile personalizate $ customCaps = array ('edit_others_contacts' => true, 'delete_others_contacts' => true, delete_private_contacts '=> true,' edit_private_contacts '=> true,' read_private_contacts '=> true,' edit_published_contacts '=> true,' publish_contacts '=> true, '=> true,' edit_contact '=> true,' read_contact '=> true,' delete_contact '=> true,' read '=> true,); // Creați rolul CRM și atribuiți capabilitățile personalizate acestuia add_role ('crm', __ ('CRM', 'tuts-crm'), $ customCaps); // Adăugați capabilități personalizate în rolurile Admin și Editor $ roles = array ("administrator", "editor"); foreach ($ roluri ca $ roleName) // Obțineți rolul $ role = get_role ($ roleName); // rolul de control există dacă (is_null ($ role)) continue; // Iterați prin capabilitățile noastre personalizate, adăugându-le // la acest rol dacă sunt activate foreach ($ customCaps ca $ capability => $ enabled) if ($ enabled) // Adăugare capabilitate $ role-> add_cap ($ capacitate); // Adăugați unele dintre capabilitățile noastre personalizate în rolul autorului $ role = get_role ("autor"); $ role-> add_cap ('edit_contact'); $ role-> add_cap ('edit_contacts'); $ role-> add_cap ('publish_contacts'); $ role-> add_cap ('read_contact'); $ role-> add_cap ('delete_contact'); dezactivat ($ rol);
Conectarea ca Administrator, Editor sau Autor va afișa acum opțiunea Contacts din meniul de administrare WordPress:
Dacă administratorul WordPress dezactivează pluginul nostru, CRM
Rolul va rămâne în WordPress. Cu toate acestea, având în vedere că nici un alt plugin sau o parte din WordPress nu folosește acest rol, este redundant - așa că trebuie să ne asigurăm că CRM
Rolul este eliminat când pluginul nostru este dezactivat.
Pentru aceasta, adăugați următoarea funcție sub plugin_activation ()
funcţie:
/ ** * Cârlig de dezactivare pentru a ne anula înregistrarea Rolelor de contacte existente * / funcția plugin_deactivation () remove_role ('crm');
În același mod în care am folosit register_activation_hook ()
când plugin-ul nostru este activat, putem folosi funcția register_deactivation_hook ()
când plugin-ul nostru se dezactivează. Să adăugăm următoarele sub register_activation_hook
apel:
register_deactivation_hook (__FILE__, array (& $ wpTutsCRM, 'plugin_deactivation'));
Când pluginul nostru este dezactivat, CRM
Rolul nu va mai fi disponibil.
Am creat cu succes un sistem CRM simplu în WordPress, explorând utilizarea tipurilor de posturi personalizate, câmpurile Post Meta și integrarea plugin-ului de la terți pentru a stoca informații despre clienții și perspectivele noastre.
Acest tutorial a acoperit, de asemenea, unele dintre aspectele mai avansate ale WordPress, prin afișarea datelor personalizate ale câmpurilor personalizate prin coloanele WP_List_Table, prin filtrarea mesajului nostru de interogare pentru a căuta datele din câmpurile personalizate avansate și prin gestionarea accesului utilizatorilor prin roluri și capabilități pentru a restricționa accesul doar la Sistemul CRM.