Maison > Article > développement back-end > Construire un CRM de base dans WordPress : tirer parti des fonctionnalités personnalisées
Nous avons étudié comment créer un système CRM simple dans WordPress. Dans la dernière partie de cette série, nous avons examiné comment utiliser les rôles pour restreindre l'accès des utilisateurs à certaines parties de l'interface d'administration de WordPress.
Aujourd'hui, nous verrons comment utiliser les fonctionnalités personnalisées pour restreindre l'accès uniquement aux types de publications personnalisés de vos contacts.
Bien que nous ayons précédemment réduit les niveaux d'accès pour les utilisateurs de WordPress, les utilisateurs peuvent toujours gérer les publications et les commentaires en les attribuant au rôle Éditeur ou Auteur. Aucune de ces fonctionnalités ne nous est utile, nous devons donc restreindre davantage l'accès et autoriser les utilisateurs spécifiés à accéder uniquement au type de publication personnalisé Contact.
Nous pouvons le faire par :
L'enregistrement de fonctionnalités personnalisées nous permet de définir ultérieurement quels rôles WordPress ont accès à ces fonctionnalités, par exemple si les auteurs peuvent créer de nouveaux contacts.
Modifions le fichier du plugin et remplaçons le register_post_type()
函数调用,将 capability_type => 'post'
par ce qui suit :
'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,
Notre fonction register_post_type()
devrait maintenant ressembler à ceci :
/** * Registers a Custom Post Type called 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( 'Contacts', 'admin menu', 'tuts-crm' ), 'name_admin_bar' => _x( 'Contact', 'add new on admin bar', 'tuts-crm' ), 'add_new' => _x( 'Add New', 'contact', 'tuts-crm' ), 'add_new_item' => __( 'Add New Contact', 'tuts-crm' ), 'new_item' => __( 'New Contact', 'tuts-crm' ), 'edit_item' => __( 'Edit Contact', 'tuts-crm' ), 'view_item' => __( 'View Contact', 'tuts-crm' ), 'all_items' => __( 'All Contacts', 'tuts-crm' ), 'search_items' => __( 'Search Contacts', 'tuts-crm' ), 'parent_item_colon' => __( 'Parent Contacts:', 'tuts-crm' ), 'not_found' => __( 'No contacts found.', 'tuts-crm' ), 'not_found_in_trash' => __( 'No contacts found in Trash.', 'tuts-crm' ), ), // Frontend 'has_archive' => false, 'public' => false, 'publicly_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( 'title', 'author', 'comments', ), ) ); }
Deux choses se produisent ici :
capability
参数定义了自己的功能,并将它们映射到其 Post 等效项。这可确保 WordPress 准确理解这些功能的含义(即 edit_contact
的行为方式与 edit_post
pour la même fonctionnalité, sauf que cela fonctionne pour notre type de publication personnalisé Contacts). map_meta_cap
pour mapper la fonctionnalité ci-dessus à la fonctionnalité native de WordPress à des fins d’application. Rechargez l'administrateur WordPress en tant qu'utilisateur et vous verrez que notre type de publication personnalisé Contact a disparu du menu d'administration WordPress :
Cela se produit parce que nous devons maintenant indiquer à WordPress quels rôles disposent de la nouvelle fonctionnalité de contacts (edit_contact
、edit_contacts
etc.).
En utilisant add_role()
, nous pouvons créer un nouveau rôle d'utilisateur WordPress et lui attribuer notre fonctionnalité Contacts. Le rôle est stocké dans les données des options WordPress, nous ne devons donc appeler la fonction qu'une seule fois.
Pour cela, ajoutez la fonction suivante à la fin de la fonction __construct()
dans notre plugin :
/** * Activation hook to register a new Role and assign it our Contact Capabilities */ function plugin_activation() { // Define our custom capabilities $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, ); // Create our CRM role and assign the custom capabilities to it add_role( 'crm', __( 'CRM', 'tuts-crm'), $customCaps ); }
Cette fonctionnalité ajoutera un nouveau rôle appelé CRM à WordPress. Les utilisateurs affectés à ce rôle ne peuvent accéder qu'à la fonctionnalité Contacts. Par conséquent, ils ne peuvent accéder qu’au type de publication personnalisé Contact.
Veuillez noter que nous avons également attribué une fonctionnalité read
à ce rôle. Ceci est nécessaire pour permettre aux utilisateurs de modifier leur profil (nom, mot de passe, etc.). Nous devons permettre aux utilisateurs de le faire car WordPress les redirige automatiquement vers l’écran de leur profil lorsqu’ils se connectent.
Si nous n'attribuions pas la fonction read
, ce qui suit se produirait lorsque l'utilisateur se connecte :
Pour exécuter notre fonction plugin_activation()
une fois, nous ajoutons le code suivant à la fin du fichier du plugin :
register_activation_hook( __FILE__, array( &$wpTutsCRM, 'plugin_activation' ) );
Cela indique à WordPress que lors de l'activation du plugin, il doit appeler la fonction WPTutsCRM
类中的 plugin_activation()
dans la classe WPTutsCRM
.
Ensuite, désactivez et réactivez votre plugin et accédez à Utilisateurs > Ajouter un nouveau dans l'interface d'administration de WordPress.
Si tout se passe bien, vous verrez le nouveau rôle CRM apparaître dans la liste déroulante :
Allons-y, créons un nouvel utilisateur nommé crm et connectons-nous en tant que nouvel utilisateur. Nous devrions maintenant voir nos Contacts , avec Tableau de bord et Profil étant les seules autres options de menu :
如果我们注销并以 WordPress 管理员、编辑或作者身份重新登录,您会发现 WordPress 管理菜单中仍然缺少联系人自定义帖子类型:
这个是因为我们只分配了 CRM
角色我们的联系人自定义帖子类型的功能。因此,所有其他用户角色仍然无权访问此帖子类型。
To fix this, let’s assign the Custom Capabilities to the Administrator and Editor Roles by adding the following code to the end of the plugin_activation()
function:
// Add custom capabilities to Admin and Editor Roles $roles = array( 'administrator', 'editor' ); foreach ( $roles as $roleName ) { // Get role $role = get_role( $roleName ); // Check role exists if ( is_null( $role) ) { continue; } // Iterate through our custom capabilities, adding them // to this role if they are enabled foreach ( $customCaps as $capability => $enabled ) { if ( $enabled ) { // Add capability $role->add_cap( $capability ); } } }
在这里,我们迭代要为其分配自定义功能的角色,检查该角色是否存在。如果是,我们就会迭代之前定义的自定义功能,将它们添加到角色中。
您会注意到我们没有向作者角色添加任何自定义功能;这是因为我们不想分配所有功能,因为作者角色传统上只允许对该用户自己的帖子进行写入访问。
让我们通过为作者角色添加一些功能来继续构建我们的 plugin_activation()
函数:
// Add some of our custom capabilities to the Author Role $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 );
我们的整个函数现在应该如下所示:
/** * Activation hook to register a new Role and assign it our Contact Capabilities */ function plugin_activation() { // Define our custom capabilities $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, ); // Create our CRM role and assign the custom capabilities to it add_role( 'crm', __( 'CRM', 'tuts-crm'), $customCaps ); // Add custom capabilities to Admin and Editor Roles $roles = array( 'administrator', 'editor' ); foreach ( $roles as $roleName ) { // Get role $role = get_role( $roleName ); // Check role exists if ( is_null( $role) ) { continue; } // Iterate through our custom capabilities, adding them // to this role if they are enabled foreach ( $customCaps as $capability => $enabled ) { if ( $enabled ) { // Add capability $role->add_cap( $capability ); } } } // Add some of our custom capabilities to the Author Role $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 ); }
以管理员、编辑或作者身份登录现在将在 WordPress 管理菜单中显示“联系人”选项:
如果 WordPress 管理员停用我们的插件,CRM
角色将保留在 WordPress 中。但是,鉴于没有其他插件或 WordPress 的一部分使用此角色,因此它是多余的 - 因此我们需要确保在停用我们的插件时删除 CRM
角色。
为此,请在 plugin_activation()
函数下方添加以下函数:
/** * Deactivation hook to unregister our existing Contacts Role */ function plugin_deactivation() { remove_role( 'crm' ); }
与我们在插件激活时使用 register_activation_hook()
函数的方式相同,当我们的插件停用时,我们可以使用 register_deactivation_hook()
函数。让我们在 register_activation_hook
调用下面添加以下内容:
register_deactivation_hook( __FILE__, array( &$wpTutsCRM, 'plugin_deactivation' ) );
停用我们的插件后,我们的 CRM
角色将不再可用。
我们已经在 WordPress 中成功创建了一个简单的 CRM 系统,探索使用自定义帖子类型、帖子元字段和第三方插件集成来存储有关我们的客户和潜在客户的信息。
本教程还涵盖了 WordPress 的一些更高级的方面,包括通过 WP_List_Table 列显示高级自定义字段数据、过滤我们的帖子查询以搜索我们的高级自定义字段数据,以及通过角色和功能管理用户访问以限制访问仅限我们的 CRM 系统。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!