Vi har sett på hvordan du lager et enkelt CRM-system i WordPress. I den siste delen av denne serien undersøkte vi hvordan du bruker Roller for å begrense brukertilgang til deler av WordPress Administration-grensesnittet.
I dag skal vi dekke hvordan du begrenser tilgangen til kun Kontakter tilpasset posttype ved hjelp av egendefinerte muligheter.
Mens vi tidligere har redusert tilgangsnivået, har våre WordPress-brukere, ved å tildele dem til en redaktør eller forfatterrolle, brukere fortsatt i stand til å administrere innlegg og kommentarer. Ingen av disse funksjonene er nyttige for oss, så vi må begrense tilgangen ytterligere, slik at tilordnede brukere kun har tilgang til Kontakter tilpasset posttype.
Vi kan gjøre dette ved å:
Registrering av egendefinerte evner gir oss mulighet til senere å definere hvilke WordPress-roller som har tilgang til disse evnene, for eksempel om en forfatter kan opprette en ny kontakt.
La oss redigere vår pluginfil register_post_type ()
funksjonsanrop, erstatning capability_type => 'innlegg'
med følgende:
'capabilities' => array ('edit_others_posts' => 'edit_others_contacts', 'delete_others_posts' => 'delete_others_contacts', 'delete_private_posts' => 'delete_private_contacts', 'edit_private_posts' => 'edit_private_contacts', 'read_private_posts' => 'read_private_contacts ',' edit_published_contacts ',' publish_posts '=' 'publish_contacts', 'delete_published_posts' => 'delete_published_contacts', 'edit_posts' => 'edit_contacts', 'delete_posts' => 'delete_contacts', 'edit_post' => 'edit_contact', 'read_post' => 'read_contact', 'delete_post' => 'delete_contact',), 'map_meta_cap' => true,
Våre register_post_type ()
funksjonen skal nå se ut som:
/ ** * Registrerer en egendefinert posttype som kalles kontakt * / funksjon register_custom_post_type () register_post_type ('kontakt', array ('labels' => array ('name' => _x ('Kontakter', 'posttype generell navn' , 'tuts-crm'), 'singular_name' => _x ('Kontakt', 'posttype entall navn', 'tuts-crm'), 'menu_name' => _x ('Kontakter', 'admin-meny' tuts-crm '),' name_admin_bar '=> _x (' Kontakt ',' legg til nytt på admin bar ',' tuts-crm '),' add_new '=> _x (' Legg til nytt ',' kontakt ' -crm '),' add_new_item '=> __ (' Legg til ny kontakt ',' tuts-crm '),' new_item '=> __ (' Ny kontakt ',' tuts-crm '),' edit_item '=> __ ('Edit Contact', 'tuts-crm'), 'view_item' => __ ('Vis kontakt', 'tuts-crm'), 'all_items' => __ ('Alle kontakter', 'tuts-crm') , 'search_items' => __ ('Søk kontakter', 'tuts-crm'), 'parent_item_colon' => __ ('Parent Contacts:', 'tuts-crm'), 'not_found' => __ ('Ingen kontakter funnet ',' tuts-crm '),' not_found_in_trash '=> __ (' Ingen kontakter funnet i Papirkurv. ',' tuts-crm '),), / Frontend' has_archive '=> falsk, 'offentlig' => falsk, 'publicly_queryable' => feil, // Admin 'capabilities' => array ('edit_others_posts' => 'edit_others_contacts', 'delete_others_posts' => 'delete_others_contacts', 'delete_private_posts' => ' delete_private_contacts ',' edit_private_contacts ',' read_private_contacts '=' 'read_private_contacts', 'edit_published_posts' => 'edit_published_contacts', 'publish_posts' => 'publish_contacts', 'delete_published_posts' => 'delete_published_contacts', 'edit_posts '=>' edit_contacts ',' delete_posts '=>' delete_contacts ',' edit_post '=>' edit_contact ',' read_post '=>' read_contact ',' delete_post '=>' delete_contact ',),' map_meta_cap '=> true, 'menu_icon' => 'dashicons-businessman', 'menu_position' => 10, 'query_var' => sant, 'show_in_menu' => true, 'show_ui' => true, 'supports' => array ',' forfatter ',' kommentarer ',),));
Her skjer to ting:
evner
argument, kartlegging dem til deres postekvivalenter. Dette sikrer at WordPress forstår nøyaktig hva evnen betyr (dvs.. Rediger kontakt
oppfører seg på samme måte som edit_post
evnen, bortsett fra at det er for vår Kontakter tilpasset posttype).map_meta_cap
, så de håndheves.Oppdater WordPress-administrasjonen som hvilken som helst Bruker, og du vil se våre Kontakter Tilpasset posttype har forsvunnet fra WordPress Administrasjonsmeny:
Dette skjedde fordi vi nå må fortelle WordPress hvilke roller som har våre nye kontakter kapasiteter (Rediger kontakt
, edit_contacts
, etc).
Ved hjelp av add_role ()
, Vi kan opprette en ny WordPress-brukerrolle og tildele våre Kontakter evner til den. Rollen lagres i WordPress Options-dataene, så vi trenger bare å ringe denne funksjonen en gang.
For å gjøre dette, legg til følgende funksjon under slutten av __construct ()
Funger i vår plugin:
/ ** * Aktiveringskrok for å registrere en ny rolle og tildele den vår kontaktfunksjoner * / funksjon plugin_activation () // Definer våre tilpassede evner $ customCaps = array ('edit_others_contacts' => true, 'delete_others_contacts' => true ' delete_private_contacts '=> sant,' edit_private_contacts '=> sant,' read_private_contacts '=> sant,' edit_published_contacts '=> sant,' publish_contacts '=> sant,' delete_published_contacts '=> sant,' edit_contacts '=> sant,' delete_contacts '=> true,' edit_contact '=> true,' read_contact '=> true,' delete_contact '=> true,' read '=> true,); // Opprett vår CRM-rolle og tilordne tilpassede evner til add_role ('crm', __ ('CRM', 'tuts-crm'), $ customCaps);
Denne funksjonen vil legge til en ny rolle kalt CRM til WordPress. Brukere som er tildelt denne rollen, har bare tilgang til Kontakter. Derfor har de bare tilgang til Kontakter tilpasset posttype.
Legg merke til at vi også tildeler lese
evne til denne rollen. Dette kreves for å tillate brukere å redigere profilen deres (navn, passord osv.). Vi må tillate brukere å gjøre dette, fordi når de logger på, vil WordPress automatisk omdirigere dem til profilskjermbildet.
Hvis vi ikke tildelte lese
evnen, dette er hva som ville skje når brukeren logger på:
Å kjøre vår plugin_activation ()
fungere en gang, la oss legge til følgende kode til slutten av plugin-filen vår:
register_activation_hook (__FILE__, array (& $ wpTutsCRM, 'plugin_activation'));
Dette forteller WordPress at det ved å aktivere plugin er nødvendig å ringe plugin_activation ()
fungere inne i vår WPTutsCRM
klasse.
Deretter deaktiverer du og aktiverer pluginet ditt igjen, og naviger deretter til Brukere> Legg til nytt i WordPress administrasjonsgrensesnittet.
Hvis alt har virket vellykket, vil du se at den nye CRM-rollen vises på rullegardinlisten:
La oss gå videre og opprette en ny bruker som heter crm, og logg inn som den nye brukeren. Vi burde nå se vår Kontakt, med dashbord og Profil som de eneste andre menyalternativene:
Hvis vi logger ut og logger på som en WordPress-administrator, redaktør eller forfatter, vil du legge merke til at Kontakter tilpasset posttype fortsatt mangler fra WordPress administrasjonsmenyen:
Dette skyldes at vi bare har tildelt CRM
Rolle våre funksjoner for tilpasset posttype. Derfor har alle andre brukerroller fortsatt ikke tilgang til denne posttypen.
For å fikse dette, la oss tildele Tilpassede evner til administrator- og redaktørrollene ved å legge til følgende kode i slutten av plugin_activation ()
funksjon:
// Legg til egendefinerte evner til Admin og Editor Roller $ roles = array ('administrator', 'editor'); foreach ($ roller som $ roleName) // Få rolle $ role = get_role ($ roleName); // Sjekk rolle eksisterer hvis (is_null ($ roll)) fortsett; // Iterate gjennom våre tilpassede evner, legg til dem // til denne rollen hvis de er aktiverte foreach ($ customCaps as $ capability => $ aktivert) if ($ enabled) // Add capability $ role-> add_cap ($ evne );
Her gjenspeiler vi gjennom Rollene vi ønsker å tilordne tilpassede evner til, sjekker rollen som eksisterer. Hvis det gjøres, gjenspeiler vi gjennom de tilpassede evnene vi definerte tidligere, og legger dem til rollen.
Du vil legge merke til at vi ikke har lagt til noen egendefinerte evner til forfatterens rolle Dette skyldes at vi ikke ønsker å tildele alle evner, da forfatterrollet tradisjonelt bare tillater skrivetilgang til brukerens egne innlegg.
La oss fortsette å bygge vår plugin_activation ()
funksjon ved å legge til noen muligheter for forfatterens rolle:
// Legg til noen av våre tilpassede evner til forfatterrollen $ role = get_role ('author'); $ role-> add_cap ('edit_contact'); $ role-> add_cap ('edit_contacts'); $ role-> add_cap ('publish_contacts'); $ role-> add_cap ('read_contact'); $ roll-> add_cap ('delete_contact'); unset ($ roll);
Hele vår funksjon bør nå se ut som:
/ ** * Aktiveringskrok for å registrere en ny rolle og tildele den vår kontaktfunksjoner * / funksjon plugin_activation () // Definer våre tilpassede evner $ customCaps = array ('edit_others_contacts' => true, 'delete_others_contacts' => true ' delete_private_contacts '=> sant,' edit_private_contacts '=> sant,' read_private_contacts '=> sant,' edit_published_contacts '=> sant,' publish_contacts '=> sant,' delete_published_contacts '=> sant,' edit_contacts '=> sant,' delete_contacts '=> true,' edit_contact '=> true,' read_contact '=> true,' delete_contact '=> true,' read '=> true,); // Opprett vår CRM-rolle og tilordne tilpassede evner til add_role ('crm', __ ('CRM', 'tuts-crm'), $ customCaps); // Legg til egendefinerte evner til Admin og Editor Roller $ roles = array ('administrator', 'editor'); foreach ($ roller som $ roleName) // Få rolle $ role = get_role ($ roleName); // Sjekk rolle eksisterer hvis (is_null ($ roll)) fortsett; // Iterate gjennom våre tilpassede evner, legg til dem // til denne rollen hvis de er aktiverte foreach ($ customCaps as $ capability => $ aktivert) if ($ enabled) // Add capability $ role-> add_cap ($ evne ); // Legg til noen av våre tilpassede evner til forfatterrollen $ role = get_role ('author'); $ role-> add_cap ('edit_contact'); $ role-> add_cap ('edit_contacts'); $ role-> add_cap ('publish_contacts'); $ role-> add_cap ('read_contact'); $ roll-> add_cap ('delete_contact'); unset ($ roll);
Logg inn som administrator, redaktør eller forfatter vil nå vise alternativet Kontakter i WordPress administrasjonsmenyen:
Hvis WordPress Administrator deaktiverer vårt plugin, vil CRM
Rollen forblir i WordPress. Men gitt at ingen annen plugin eller en del av WordPress bruker denne rollen, er den overflødig, så vi må sørge for at CRM
Rollen blir fjernet når pluginet er deaktivert.
For å gjøre dette, legg til følgende funksjon under plugin_activation ()
funksjon:
/ ** * Deaktiveringskrok for å avregistrere vår eksisterende Kontakter rolle * / funksjon plugin_deactivation () remove_role ('crm');
På samme måte brukte vi register_activation_hook ()
Fungerer når pluginet er aktivert, kan vi bruke register_deactivation_hook ()
når pluginet deaktiveres. La oss legge til følgende under register_activation_hook
anrop:
register_deactivation_hook (__FILE__, array (& $ wpTutsCRM, 'plugin_deactivation'));
Når vårt plugin er deaktivert, vår CRM
Rollen vil ikke lenger være tilgjengelig.
Vi har opprettet et enkelt CRM-system i WordPress, undersøker bruken av egendefinerte innleggstyper, postmetafelt og integrering av tredjeparts plugin for å lagre informasjon om våre kunder og potensielle kunder.
Denne opplæringen har også dekket noen av de mer avanserte aspektene av WordPress, ved å vise avanserte egendefinerte feltdata gjennom WP_List_Table-kolonner, filtrere postspørsmålet for å søke i våre avanserte egendefinerte feltdata og administrere brukertilgang gjennom roller og evner for å begrense tilgangen til bare vår CRM-system.