Maison > développement back-end > tutoriel php > Construire un CRM de base dans WordPress : tirer parti des fonctionnalités personnalisées

Construire un CRM de base dans WordPress : tirer parti des fonctionnalités personnalisées

WBOY
Libérer: 2023-08-29 20:02:02
original
1023 Les gens l'ont consulté

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.

Fonctions personnalisées

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 :

  1. Enregistrez des fonctionnalités personnalisées sur nos types de publication personnalisés
  2. Créez un nouveau rôle d'utilisateur WordPress et attribuez uniquement nos nouvelles fonctionnalités personnalisées à ce rôle
  3. Créez/modifiez des utilisateurs WordPress et attribuez-leur de nouveaux rôles de contact

Enregistrez des fonctionnalités personnalisées sur nos types de publication personnalisés

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,
Copier après la connexion

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',
        ),
    ) );	
}
Copier après la connexion

Deux choses se produisent ici :

  1. Nous utilisons capability 参数定义了自己的功能,并将它们映射到其 Post 等效项。这可确保 WordPress 准确理解这些功能的含义(即 edit_contact 的行为方式与 edit_post pour la même fonctionnalité, sauf que cela fonctionne pour notre type de publication personnalisé Contacts).
  2. Nous avons demandé à WordPress d’utiliser 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 :

在 WordPress 中构建基本 CRM:利用自定义功能

Cela se produit parce que nous devons maintenant indiquer à WordPress quels rôles disposent de la nouvelle fonctionnalité de contacts (edit_contactedit_contacts etc.).

Créez de nouveaux rôles d'utilisateur WordPress et attribuez-leur de nouvelles fonctionnalités personnalisées

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 );
	
}
Copier après la connexion

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 :

在 WordPress 中构建基本 CRM:利用自定义功能

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' ) );
Copier après la connexion

Cela indique à WordPress que lors de l'activation du plugin, il doit appeler la fonction WPTutsCRM 类中的 plugin_activation() dans la classe WPTutsCRM.

Créez/modifiez des utilisateurs WordPress et attribuez-leur de nouveaux rôles de contact

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 :

在 WordPress 中构建基本 CRM:利用自定义功能

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 中构建基本 CRM:利用自定义功能

为其他角色分配自定义功能

如果我们注销并以 WordPress 管理员、编辑或作者身份重新登录,您会发现 WordPress 管理菜单中仍然缺少联系人自定义帖子类型:

在 WordPress 中构建基本 CRM:利用自定义功能

这个是因为我们只分配了 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 );
		}
	}
}
Copier après la connexion

在这里,我们迭代要为其分配自定义功能的角色,检查该角色是否存在。如果是,我们就会迭代之前定义的自定义功能,将它们添加到角色中。

您会注意到我们没有向作者角色添加任何自定义功能;这是因为我们不想分配所有功能,因为作者角色传统上只允许对该用户自己的帖子进行写入访问。

让我们通过为作者角色添加一些功能来继续构建我们的 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 );
Copier après la connexion

我们的整个函数现在应该如下所示:

/**
* 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 );
	
}
Copier après la connexion

以管理员、编辑或作者身份登录现在将在 WordPress 管理菜单中显示“联系人”选项:

在 WordPress 中构建基本 CRM:利用自定义功能

清洁提升我们的角色

如果 WordPress 管理员停用我们的插件,CRM 角色将保留在 WordPress 中。但是,鉴于没有其他插件或 WordPress 的一部分使用此角色,因此它是多余的 - 因此我们需要确保在停用我们的插件时删除 CRM 角色。

为此,请在 plugin_activation() 函数下方添加以下函数:

/**
* Deactivation hook to unregister our existing Contacts Role
*/
function plugin_deactivation() {
	
	remove_role( 'crm' );
	
}
Copier après la connexion

与我们在插件激活时使用 register_activation_hook() 函数的方式相同,当我们的插件停用时,我们可以使用 register_deactivation_hook() 函数。让我们在 register_activation_hook 调用下面添加以下内容:

register_deactivation_hook( __FILE__, array( &$wpTutsCRM, 'plugin_deactivation' ) );
Copier après la connexion

停用我们的插件后,我们的 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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal