Table des matières
Fonctions personnalisées
Enregistrez des fonctionnalités personnalisées sur nos types de publication personnalisés
Créez de nouveaux rôles d'utilisateur WordPress et attribuez-leur de nouvelles fonctionnalités personnalisées
Créez/modifiez des utilisateurs WordPress et attribuez-leur de nouveaux rôles de contact
为其他角色分配自定义功能
清洁提升我们的角色
摘要
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

Aug 29, 2023 pm 08:01 PM

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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium) 11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium) Mar 03, 2025 am 10:49 AM

Les longues URL, souvent encombrées de mots clés et de paramètres de suivi, peuvent dissuader les visiteurs. Un script de raccourcissement d'URL offre une solution, créant des liens concis idéaux pour les médias sociaux et d'autres plateformes. Ces scripts sont utiles pour les sites Web individuels

Travailler avec les données de session Flash dans Laravel Travailler avec les données de session Flash dans Laravel Mar 12, 2025 pm 05:08 PM

Laravel simplifie la gestion des données de session temporaires à l'aide de ses méthodes de flash intuitives. Ceci est parfait pour afficher de brefs messages, alertes ou notifications dans votre application. Les données ne persistent que pour la demande ultérieure par défaut: $ demande-

Construisez une application React avec un Laravel Back End: Partie 2, React Construisez une application React avec un Laravel Back End: Partie 2, React Mar 04, 2025 am 09:33 AM

Il s'agit de la deuxième et dernière partie de la série sur la construction d'une application React avec un back-end Laravel. Dans la première partie de la série, nous avons créé une API RESTful utilisant Laravel pour une application de liste de base sur le produit. Dans ce tutoriel, nous serons Dev

Misque de réponse HTTP simplifié dans les tests Laravel Misque de réponse HTTP simplifié dans les tests Laravel Mar 12, 2025 pm 05:09 PM

Laravel fournit une syntaxe de simulation de réponse HTTP concise, simplifiant les tests d'interaction HTTP. Cette approche réduit considérablement la redondance du code tout en rendant votre simulation de test plus intuitive. L'implémentation de base fournit une variété de raccourcis de type de réponse: Utiliser illuminate \ support \ faades \ http; Http :: faux ([[ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Mar 14, 2025 am 11:42 AM

L'extension PHP Client URL (CURL) est un outil puissant pour les développeurs, permettant une interaction transparente avec des serveurs distants et des API REST. En tirant parti de Libcurl, une bibliothèque de transfert de fichiers multi-protocol très respectée, PHP Curl facilite Efficient Execu

12 meilleurs scripts de chat PHP sur Codecanyon 12 meilleurs scripts de chat PHP sur Codecanyon Mar 13, 2025 pm 12:08 PM

Voulez-vous fournir des solutions instantanées en temps réel aux problèmes les plus pressants de vos clients? Le chat en direct vous permet d'avoir des conversations en temps réel avec les clients et de résoudre leurs problèmes instantanément. Il vous permet de fournir un service plus rapide à votre personnalité

Annonce de l'enquête sur la situation en 2025 PHP Annonce de l'enquête sur la situation en 2025 PHP Mar 03, 2025 pm 04:20 PM

L'enquête sur le paysage PHP 2025 étudie les tendances actuelles de développement du PHP. Il explore l'utilisation du cadre, les méthodes de déploiement et les défis, visant à fournir des informations aux développeurs et aux entreprises. L'enquête prévoit la croissance de la PHP moderne versio

Notifications à Laravel Notifications à Laravel Mar 04, 2025 am 09:22 AM

Dans cet article, nous allons explorer le système de notification dans le framework Web Laravel. Le système de notification de Laravel vous permet d'envoyer des notifications aux utilisateurs sur différents canaux. Aujourd'hui, nous discuterons de la façon dont vous pouvez envoyer des notifications OV

See all articles