Créer un CRM simple dans WordPress Utilisation de fonctionnalités personnalisées

Nous avons cherché à créer un système CRM simple dans WordPress. Dans la dernière partie de cette série, nous avons exploré comment utiliser les rôles pour limiter l'accès des utilisateurs à certaines parties de l'interface d'administration WordPress..

Aujourd'hui, nous verrons comment restreindre l'accès au type de publication personnalisée des contacts à l'aide de fonctionnalités personnalisées..

Capacités personnalisées

Alors que nous avions précédemment réduit le niveau d’accès de nos utilisateurs WordPress, en leur attribuant un rôle d’éditeur ou d’auteur, les utilisateurs sont toujours en mesure de gérer les publications et les commentaires. Aucune de ces fonctions ne nous étant utiles, nous devons donc restreindre davantage l'accès, afin de permettre aux utilisateurs assignés d'avoir uniquement accès au type de publication personnalisée des contacts..

Nous pouvons le faire en:

  1. enregistrement de capacités personnalisées sur notre type de message personnalisé
  2. créer un nouveau rôle d'utilisateur WordPress, en affectant simplement nos nouvelles fonctionnalités personnalisées à ce rôle
  3. créer / éditer des utilisateurs WordPress, en les affectant au nouveau rôle de contacts

Enregistrement de fonctionnalités personnalisées sur notre type de publication personnalisé

L'enregistrement de fonctionnalités personnalisées nous permet de définir ultérieurement le ou les rôles WordPress ayant accès à ces fonctionnalités, par exemple si un auteur peut créer un nouveau contact..

Modifions notre fichier de plugin register_post_type () appel de fonction, remplacement capacite_type => 'post' avec ce qui suit:

'capacités' => array ('edit_others_posts' => 'edit_others_contacts', 'delete_others_posts' => 'delete_others_contacts', 'delete_private_posts' => 's'; ',' edit_published_posts '=>' edit_published_contacts ',' publish_posts '=>' publish_contacts ',' delete_published_posts '=>' delete_published_contacts ',' edit_posts '=>' edit_contacts ',' edit_contacts ',' ' => 'edit_contact', 'read_post' => 'read_contact', 'delete_post' => 'delete_contact',), 'map_meta_cap' => true, 

Notre register_post_type () la fonction devrait maintenant ressembler à:

/ ** * Enregistre un type de publication personnalisé appelé contact * / function register_custom_post_type () register_post_type ('contact', array ('labels' => array ('name' => _x ('Contacts', nom général de type publication ')' , 'tuts-crm'), 'singular_name' => _x ('Contact', 'nom singulier du type de message', 'tuts-crm'), 'menu_name' => _x ('Contacts', 'menu admin.', ' tuts-crm '),' name_admin_bar '=> _x (' Contact ',' Ajouter nouveau sur la barre d'administration ',' Tuts-crm '),' add_new '=> _x (' Ajouter nouveau ',' Contact ',' Tuts -crm '),' add_new_item '=> __ (' Ajouter un nouveau contact ',' tuts-crm '),' new_item '=> __ (' Nouveau contact ',' tuts-crm '),' edit_item '=> __ ('Edit Contact', 'tuts-crm'), 'view_item' => __ ('Afficher le contact', 'tuts-crm'), 'all_items' => __ ('Tous les contacts', 'tuts-crm') , 'search_items' => __ ('Rechercher contacts', 'tuts-crm'), 'parent_item_colon' => __ ('Contacts parents:', 'tuts-crm'), 'not_found' => __ ('Aucun contact found. ',' tuts-crm '),' not_found_in_trash '=> __ (' Aucun contact trouvé dans la corbeille. ',' tuts-crm '),), // Frontend' has_archive '=> false, 'public' => false, 'publiquement_queryable' => false, // Admin 'capacités' => 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', '=>' 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, 'prend en charge' => array ('title ',' auteur ',' commentaires ',),));  

Ici, deux choses se passent:

  1. Nous avons défini nos propres capacités en utilisant le capacités argument, en les mappant à leurs équivalents Post. Cela garantit que WordPress comprendra précisément ce que signifient les capacités (c'est-à-dire. Modifier le contact se comporte de la même manière que le edit_post capacité, sauf que c'est pour notre type de message personnalisé Contacts).
  2. Nous avons demandé à WordPress de mapper les capacités ci-dessus aux capacités primitives de WordPress, en utilisant map_meta_cap, ils sont donc forcés.

Rechargez l'administration WordPress en tant qu'utilisateur, et vous verrez que notre type de message personnalisé dans les contacts a disparu du menu Administration de WordPress:

Ceci est dû au fait que nous devons maintenant indiquer à WordPress quels rôles ont nos nouvelles capacités de contacts (Modifier le contact, edit_contacts, etc).

Création d'un nouveau rôle d'utilisateur WordPress, lui attribuant uniquement nos nouvelles fonctionnalités personnalisées

En utilisant add_role (), nous pouvons créer un nouveau rôle d'utilisateur WordPress et lui attribuer nos capacités de contacts. Le rôle est stocké dans les données des options WordPress, nous n'avons donc besoin d'appeler qu'une fois cette fonction..

Pour ce faire, ajoutez la fonction suivante sous la fin du __construction() fonction dans notre plugin:

/ ** * Crochet d'activation pour enregistrer un nouveau rôle et lui attribuer nos capacités de contact * / function plugin_activation () // Définir nos capacités personnalisées $ 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,' edit_contact '=> true,' read_contact '=> true,' delete_contact '=> true,' read '=> true,); // Créer notre rôle CRM et lui attribuer les fonctionnalités personnalisées add_role ('crm', __ ('CRM', 'tuts-crm'), $ customCaps);  

Cette fonction ajoutera un nouveau rôle appelé CRM à WordPress. Les utilisateurs affectés à ce rôle auront uniquement accès aux fonctionnalités de contacts. Par conséquent, ils auront uniquement accès au type de message personnalisé des contacts..

Remarquez que nous attribuons également le lis capacité à ce rôle. Cela est nécessaire pour permettre aux utilisateurs de modifier leur profil (nom, mot de passe, etc.). Nous devons autoriser les utilisateurs à le faire, car lorsqu'ils se connecteront, WordPress les redirigera automatiquement vers l'écran du profil..

Si nous n'avons pas assigné le lis c'est ce qui se produirait lorsque l'utilisateur se connecte:

Pour exécuter notre plugin_activation () une fois, ajoutons le code suivant à la fin de notre fichier de plugin:

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

Cela indique à WordPress que, lors de l’activation du plug-in, il doit appeler le plugin_activation () fonctionner à l'intérieur de notre WPTutsCRM classe.

Créer / modifier des utilisateurs WordPress, les attribuer au nouveau rôle de contacts

Ensuite, désactivez et réactivez votre plug-in, puis accédez à Utilisateurs> Ajouter un nouveau dans l'interface d'administration WordPress.

Si tout a fonctionné correctement, le nouveau rôle CRM apparaît dans la liste déroulante:

Allons-y et créons un nouvel utilisateur appelé crm, et connectez-vous en tant que nouvel utilisateur. Nous devrions maintenant voir notre Contacts, avec le Tableau de bord et Profil comme les seules autres options de menu:

Affectation de fonctionnalités personnalisées à d'autres rôles

Si nous nous déconnectons et nous reconnectons en tant qu'administrateur, éditeur ou auteur de WordPress, vous remarquerez que le type de publication personnalisée des contacts est toujours absent du menu Administration de WordPress:

C’est parce que nous n’avons assigné que CRM Rôlez les capacités de notre type de message personnalisé. Par conséquent, tous les autres rôles d’utilisateur n’ont toujours pas accès à ce type de publication..

Pour résoudre ce problème, affectons les fonctionnalités personnalisées aux rôles d’administrateur et d’éditeur en ajoutant le code suivant à la fin du document. plugin_activation () une fonction:

// Ajoute des fonctionnalités personnalisées aux rôles d'administrateur et d'édition $ roles = array ('administrator', 'editor'); foreach ($ role as $ roleName) // Récupère le rôle $ role = get_role ($ roleName); // Vérifier le rôle existe si (is_null ($ role)) continue;  // Parcourez nos fonctionnalités personnalisées, // en les ajoutant à ce rôle si elles sont activées pour chaque fonction ($ customCaps as $ feature => $ enabled) if ($ enabled) // Ajouter une fonctionnalité $ role-> add_cap ($ aptitude );  

Ici, nous parcourons les rôles auxquels nous voulons affecter des capacités personnalisées, en vérifiant que le rôle existe. Si tel est le cas, nous parcourons les capacités personnalisées définies précédemment, en les ajoutant au rôle.

Vous remarquerez que nous n’avons ajouté aucune fonctionnalité personnalisée au rôle d’auteur; ceci est dû au fait que nous ne souhaitons pas attribuer toutes les fonctionnalités, car le rôle d'auteur ne permet traditionnellement qu'un accès en écriture à ses propres publications..

Continuons à construire notre plugin_activation () fonction en ajoutant des fonctionnalités pour le rôle d’auteur:

// Ajoute certaines de nos fonctionnalités personnalisées au rôle d'auteur $ 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'); non défini ($ rôle); 

Toute notre fonction devrait maintenant ressembler à:

/ ** * Crochet d'activation pour enregistrer un nouveau rôle et lui attribuer nos capacités de contact * / function plugin_activation () // Définir nos capacités personnalisées $ 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,' edit_contact '=> true,' read_contact '=> true,' delete_contact '=> true,' read '=> true,); // Créer notre rôle CRM et lui attribuer les fonctionnalités personnalisées add_role ('crm', __ ('CRM', 'tuts-crm'), $ customCaps); // Ajoute des fonctionnalités personnalisées aux rôles d'administrateur et d'édition $ roles = array ('administrator', 'editor'); foreach ($ role as $ roleName) // Récupère le rôle $ role = get_role ($ roleName); // Vérifier le rôle existe si (is_null ($ role)) continue;  // Parcourez nos fonctionnalités personnalisées, // en les ajoutant à ce rôle si elles sont activées pour chaque fonction ($ customCaps as $ feature => $ enabled) if ($ enabled) // Ajouter une fonctionnalité $ role-> add_cap ($ aptitude );  // Ajoute certaines de nos fonctionnalités personnalisées au rôle d'auteur $ 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'); non défini ($ rôle);  

Si vous vous connectez en tant qu’administrateur, éditeur ou auteur, l’option Contacts du menu Administration de WordPress s'affiche:

Nettoyer nos rôles

Si l'administrateur WordPress désactive notre plugin, le CRM Le rôle restera dans WordPress. Cependant, étant donné qu’aucun autre plugin ni aucune partie de WordPress n’utilise ce rôle, il est redondant. Nous devons donc nous assurer que CRM Le rôle est supprimé lorsque notre plugin est désactivé.

Pour ce faire, ajoutez la fonction suivante sous le plugin_activation () une fonction:

/ ** * Crochet de désactivation pour annuler l'enregistrement de notre rôle de contacts existant * / function plugin_deactivation () remove_role ('crm');  

De la même manière, nous avons utilisé le register_activation_hook () fonctionner lorsque notre plugin activé, nous pouvons utiliser le register_deactivation_hook () quand notre plugin se désactive. Ajoutons ce qui suit ci-dessous le register_activation_hook appel:

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

Lorsque notre plugin est désactivé, notre CRM Le rôle ne sera plus disponible.

Résumé

Nous avons réussi à créer un système de gestion de la relation client simple dans WordPress, explorant l'utilisation de types de messages personnalisés, de champs de métadonnées et de l'intégration de plug-ins tiers pour stocker des informations sur nos clients et prospects..

Ce didacticiel a également abordé certains des aspects les plus avancés de WordPress, en affichant les données Advanced Custom Fields via les colonnes WP_List_Table, en filtrant notre requête de recherche afin de rechercher dans nos données Advanced Custom Fields, et en gérant l'accès des utilisateurs par le biais de rôles et de fonctionnalités afin de limiter l'accès à nos données. Système CRM.