Crea un CRM semplice in WordPress utilizzo di funzionalità personalizzate

Abbiamo cercato come creare un semplice sistema CRM in WordPress. Nell'ultima parte di questa serie, abbiamo esplorato come utilizzare i ruoli per limitare l'accesso degli utenti a parti dell'interfaccia di amministrazione di WordPress.

Oggi illustreremo come limitare l'accesso solo al tipo di post personalizzato dei contatti utilizzando le funzionalità personalizzate.

Funzionalità personalizzate

Sebbene in precedenza abbiamo ridotto il livello di accesso che i nostri utenti di WordPress hanno, assegnandoli a un ruolo di editor o autore, gli utenti sono comunque in grado di gestire post e commenti. Nessuna di queste funzioni è utile per noi, quindi è necessario limitare ulteriormente l'accesso, consentendo agli utenti assegnati di avere accesso solo al tipo di messaggio personalizzato dei contatti.

Possiamo farlo da:

  1. registrazione delle capacità personalizzate sul nostro tipo di posta personalizzato
  2. creando un nuovo ruolo utente di WordPress, assegnando solo le nostre nuove funzionalità personalizzate a quel ruolo
  3. creare / modificare utenti di WordPress, assegnandoli al nuovo ruolo Contatti

Registrazione di funzionalità personalizzate sul nostro tipo di post personalizzato

La registrazione di funzionalità personalizzate ci consente di definire in seguito quali ruoli di WordPress hanno accesso a tali capacità, ad esempio se un autore può creare un nuovo contatto.

Modifichiamo i nostri file di plugin register_post_type () chiamata di funzione, sostituzione capability_type => 'post' con il seguente:

'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_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, 

Nostro register_post_type () la funzione dovrebbe ora apparire come:

/ ** * Registra un tipo di messaggio personalizzato chiamato contact * / function register_custom_post_type () register_post_type ('contact', array ('labels' => array ('name' => _x ('Contacts', 'post type general name' , 'tuts-crm'), 'singular_name' => _x ('Contact', 'post type singular name', 'tuts-crm'), 'menu_name' => _x ('Contatti', 'menu di amministrazione', ' tuts-crm '),' name_admin_bar '=> _x (' Contatto ',' aggiungi nuovo su barra di amministrazione ',' tuts-crm '),' add_new '=> _x (' Aggiungi nuovo ',' contatto ',' tuts -crm '),' add_new_item '=> __ (' Aggiungi nuovo contatto ',' tuts-crm '),' new_item '=> __ (' Nuovo contatto ',' tuts-crm '),' edit_item '=> __ ('Modifica contatto', 'tuts-crm'), 'view_item' => __ ('Visualizza contatto', 'tuts-crm'), 'all_items' => __ ('Tutti i contatti', 'tuts-crm') , 'search_items' => __ ('Cerca contatti', 'tuts-crm'), 'parent_item_colon' => __ ('Contatti principali:', 'tuts-crm'), 'not_found' => __ ('Nessun contatto found. ',' tuts-crm '),' not_found_in_trash '=> __ (' Nessun contatto trovato nel Cestino. ',' tuts-crm '),), // Frontend' has_archive '=> false, 'public' => false, 'public_queryable' => false, // Admin '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_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' => true, 'show_in_menu' => true, 'show_ui' => true, 'supports' => array ('titolo ',' autore ',' commenti ',),));  

Qui, due cose accadono:

  1. Abbiamo definito le nostre capacità usando il capacità argomento, mappandoli ai loro equivalenti Post. Questo assicura che WordPress capisca esattamente cosa significano le capacità (es. Modifica il contatto si comporta allo stesso modo del modifica post capacità, tranne che per i nostri contatti. Tipo di messaggio personalizzato).
  2. Abbiamo detto a WordPress di mappare le funzionalità di cui sopra alle funzionalità primitive di WordPress, usando map_meta_cap, quindi vengono applicate.

Ricarica l'amministrazione di WordPress come qualsiasi utente, e vedrai i nostri contatti Tipo di messaggio personalizzato è scomparso dal menu di amministrazione di WordPress:

Questo è successo perché ora dobbiamo dire a WordPress quali ruoli hanno le nostre nuove funzionalità di contatti (Modifica il contatto, edit_contacts, eccetera).

Creazione di un nuovo ruolo utente di WordPress, assegnando solo le nostre nuove funzionalità personalizzate

utilizzando add_role (), possiamo creare un nuovo ruolo utente di WordPress e assegnarci le funzionalità dei contatti. Il ruolo è memorizzato nei dati delle opzioni di WordPress, quindi è necessario effettuare questa chiamata una sola volta.

Per fare ciò, aggiungi la seguente funzione sotto la fine del __costruire() funzione nel nostro plugin:

/ ** * Hook di attivazione per registrare un nuovo ruolo e assegnargli le nostre capacità di contatto * / function plugin_activation () // Definire le nostre capacità personalizzate $ 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,' delete_published_contacts '=> true,' edit_contacts '=> true,' delete_contacts '=> true,' edit_contact '=> true,' read_contact '=> true,' delete_contact '=> true,' read '=> true,); // Crea il nostro ruolo CRM e assegna le funzionalità personalizzate ad esso add_role ('crm', __ ('CRM', 'tuts-crm'), $ customCaps);  

Questa funzione aggiungerà un nuovo ruolo chiamato CRM a WordPress. Gli utenti assegnati a questo ruolo avranno accesso solo alle funzionalità dei contatti. Pertanto, avranno accesso solo al tipo di post personalizzato Contatti.

Notiamo che assegniamo anche il leggere capacità di questo ruolo. Questo è necessario per consentire agli utenti di modificare il proprio profilo (nome, password, ecc.). Dobbiamo consentire agli utenti di fare ciò, perché quando si collegano, WordPress li reindirizzerà automaticamente alla schermata Profilo.

Se non abbiamo assegnato il leggere capacità, questo è quello che succederebbe quando l'Utente si collega:

Per gestire il nostro plugin_activation () funzione una volta, aggiungiamo il seguente codice alla fine del nostro file plugin:

register_activation_hook (__FILE__, array (& $ wpTutsCRM, 'plugin_activation')); 

Questo dice a WordPress che, all'attivazione del plugin, ha bisogno di chiamare il plugin_activation () funzione dentro la nostra WPTutsCRM classe.

Creazione / modifica degli utenti di WordPress, assegnandoli al nuovo ruolo dei contatti

Quindi, disattiva e riattiva il plug-in, quindi naviga verso Utenti> Aggiungi nuovo nell'interfaccia di amministrazione di WordPress.

Se tutto ha funzionato correttamente, vedrai apparire il nuovo ruolo CRM nell'elenco a discesa:

Andiamo avanti e creare un nuovo utente chiamato crm, e accedi come quel nuovo utente. Ora dovremmo vedere il nostro Contatti, con il Cruscotto e Profilo come le uniche altre opzioni di menu:

Assegnazione di capacità personalizzate ad altri ruoli

Se eseguiamo il logout e riconnettiamo come amministratore, editor o autore di WordPress, noterai che il tipo di post personalizzato di Contatti non è presente nel menu di amministrazione di WordPress:

Questo perché abbiamo solo assegnato il CRM Ruolo le nostre capacità di tipo di contatto personalizzato. Pertanto, tutti gli altri ruoli utente non hanno ancora accesso a questo tipo di messaggio.

Per risolvere questo problema, assegniamo le Funzionalità personalizzate ai ruoli di amministratore e editor aggiungendo il seguente codice alla fine del file plugin_activation () funzione:

// Aggiungi funzionalità personalizzate ai ruoli di amministrazione e editor $ roles = array ('administrator', 'editor'); foreach ($ ruoli come $ roleName) // Recupera il ruolo $ role = get_role ($ roleName); // Controlla il ruolo esiste se (is_null ($ role)) continua;  // Iterate attraverso le nostre capacità personalizzate, aggiungendoli // a questo ruolo se sono abilitati foreach ($ customCaps come $ capability => $ abilitato) if ($ abilitato) // Aggiungi capacità $ ruolo-> add_cap ($ capacità );  

Qui, iteriamo attraverso i ruoli ai quali vogliamo assegnare capacità personalizzate, verificando che il ruolo esista. Se lo fa, eseguiamo quindi l'iterazione delle funzionalità personalizzate definite in precedenza, aggiungendole al ruolo.

Noterai che non abbiamo aggiunto alcuna funzionalità personalizzata al ruolo dell'autore; questo perché non vogliamo assegnare tutte le funzionalità, poiché il ruolo di autore consente tradizionalmente solo l'accesso in scrittura agli stessi post dell'utente.

Continuiamo a costruire il nostro plugin_activation () funzione aggiungendo alcune funzionalità per il ruolo autore:

// Aggiungi alcune delle nostre capacità personalizzate al ruolo dell'autore $ role = get_role ('author'); $ 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'); unset ($ role); 

La nostra intera funzione dovrebbe ora assomigliare a:

/ ** * Hook di attivazione per registrare un nuovo ruolo e assegnargli le nostre capacità di contatto * / function plugin_activation () // Definire le nostre capacità personalizzate $ 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,' delete_published_contacts '=> true,' edit_contacts '=> true,' delete_contacts '=> true,' edit_contact '=> true,' read_contact '=> true,' delete_contact '=> true,' read '=> true,); // Crea il nostro ruolo CRM e assegna le funzionalità personalizzate ad esso add_role ('crm', __ ('CRM', 'tuts-crm'), $ customCaps); // Aggiungi funzionalità personalizzate ai ruoli di amministrazione e editor $ roles = array ('administrator', 'editor'); foreach ($ ruoli come $ roleName) // Recupera il ruolo $ role = get_role ($ roleName); // Controlla il ruolo esiste se (is_null ($ role)) continua;  // Iterate attraverso le nostre capacità personalizzate, aggiungendoli // a questo ruolo se sono abilitati foreach ($ customCaps come $ capability => $ abilitato) if ($ abilitato) // Aggiungi capacità $ ruolo-> add_cap ($ capacità );  // Aggiungi alcune delle nostre funzionalità personalizzate al ruolo Autore $ role = get_role ('author'); $ 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'); unset ($ role);  

L'accesso come amministratore, editor o autore mostrerà l'opzione Contatti nel menu di amministrazione di WordPress:

Pulire i nostri ruoli

Se l'amministratore di WordPress disattiva il nostro plugin, il CRM Il ruolo rimarrà in WordPress. Tuttavia, dato che nessun altro plug-in o parte di WordPress utilizza questo ruolo, è ridondante, quindi è necessario assicurarsi che il CRM Il ruolo viene rimosso quando il nostro plugin è disattivato.

Per fare ciò, aggiungi la seguente funzione sotto plugin_activation () funzione:

/ ** * Gancio di disattivazione per annullare la registrazione del nostro ruolo Contatti esistente * / function plugin_deactivation () remove_role ('crm');  

Allo stesso modo abbiamo usato il register_activation_hook () funzione quando il nostro plugin è attivato, possiamo usare il register_deactivation_hook () quando il nostro plugin si disattiva. Aggiungiamo quanto segue sotto register_activation_hook chiamata:

register_deactivation_hook (__FILE__, array (& $ wpTutsCRM, 'plugin_deactivation')); 

Quando il nostro plugin è disattivato, il nostro CRM Il ruolo non sarà più disponibile.

Sommario

Abbiamo creato con successo un semplice sistema CRM in WordPress, esplorando l'uso di tipi di post personalizzati, campi Post Meta e integrazione di plug-in di terze parti per archiviare informazioni sui nostri clienti e potenziali clienti.

Questo tutorial ha inoltre coperto alcuni degli aspetti più avanzati di WordPress, visualizzando i dati dei Campi personalizzati avanzati tramite le colonne WP_List_Table, filtrando la nostra Query Post per cercare i dati dei Campi personalizzati avanzati e gestendo l'accesso degli utenti tramite Ruoli e Funzionalità per limitare l'accesso al nostro Sistema CRM.