Rumah >pembangunan bahagian belakang >tutorial php >Membina CRM asas dalam WordPress: Memanfaatkan ciri tersuai

Membina CRM asas dalam WordPress: Memanfaatkan ciri tersuai

WBOY
WBOYasal
2023-08-29 20:01:011023semak imbas

Kami telah melihat bagaimana untuk mencipta sistem CRM mudah dalam WordPress. Pada bahagian akhir siri ini, kami melihat cara menggunakan peranan untuk menyekat akses pengguna kepada bahagian antara muka pentadbir WordPress.

Hari ini kami akan menunjukkan kepada anda cara menggunakan ciri tersuai untuk mengehadkan akses kepada jenis siaran tersuai kenalan anda sahaja.

Fungsi tersuai

Walaupun sebelum ini kami telah mengurangkan tahap akses untuk pengguna WordPress, pengguna masih boleh mengurus siaran dan ulasan dengan memberikannya kepada peranan Editor atau Pengarang. Tiada satu pun daripada ciri ini berguna kepada kami, jadi kami perlu mengehadkan lagi akses dan membenarkan pengguna tertentu untuk hanya mengakses jenis siaran tersuai Kenalan.

Kita boleh melakukannya dengan cara berikut:

  1. Daftar ciri tersuai pada jenis siaran tersuai kami
  2. Buat peranan pengguna WordPress baharu dan tetapkan hanya ciri tersuai baharu kami kepada peranan itu
  3. Buat/edit pengguna WordPress dan tetapkan mereka kepada peranan kenalan baharu

Daftar fungsi tersuai pada jenis siaran tersuai kami

Mendaftarkan ciri tersuai membolehkan kami menentukan peranan WordPress mana yang mempunyai akses kepada ciri tersebut, sebagai contoh, sama ada pengarang boleh mencipta kenalan baharu.

Mari edit panggilan fungsi register_post_type() bagi fail pemalam dan gantikan capability_type => 'post' dengan yang berikut: register_post_type() 函数调用,将 capability_type => 'post' 替换为以下内容:

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

我们的 register_post_type() 函数现在应如下所示:

/**
* 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',
        ),
    ) );	
}

这里发生了两件事:

  1. 我们使用 capability 参数定义了自己的功能,并将它们映射到其 Post 等效项。这可确保 WordPress 准确理解这些功能的含义(即 edit_contact 的行为方式与 edit_post 功能相同,只不过它适用于我们的联系人自定义帖子类型)。
  2. 我们已告知 WordPress 使用 map_meta_cap 将上述功能映射到 WordPress 的原始功能,以便强制执行。

以任何用户身份重新加载 WordPress 管理,您将看到我们的联系人自定义帖子类型已从 WordPress 管理菜单中消失:

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

发生这种情况是因为我们现在需要告诉 WordPress 哪些角色具有新的联系人功能(edit_contactedit_contacts 等)。

创建新的 WordPress 用户角色,为其分配新的自定义功能

使用 add_role(),我们可以创建一个新的 WordPress 用户角色并向其分配我们的联系人功能。该角色存储在 WordPress 选项数据中,因此我们只需调用该函数一次。

为此,请在我们的插件中的 __construct() 函数末尾添加以下函数:

/**
* 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 );
	
}

此功能将向 WordPress 添加一个名为 CRM 的新角色。分配给此角色的用户只能访问联系人功能。因此,他们只能访问联系人自定义帖子类型。

请注意,我们还为此角色分配了 read 功能。这是允许用户编辑其个人资料(姓名、密码等)所必需的。我们需要允许用户执行此操作,因为当他们登录时,WordPress 会自动将他们重定向到个人资料屏幕。

如果我们没有分配 read 功能,用户登录时会发生以下情况:

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

要运行我们的 plugin_activation() 函数一次,我们将以下代码添加到插件文件的末尾:

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

这告诉 WordPress,在激活插件时,它需要调用 WPTutsCRM 类中的 plugin_activation()

// 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 );
		}
	}
}

Fungsi register_post_type() kami kini sepatutnya kelihatan seperti ini:

// 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 );

Dua perkara berlaku di sini:

Kami mentakrifkan keupayaan kami sendiri menggunakan parameter keupayaan dan memetakannya kepada setara Post mereka. Ini memastikan WordPress memahami dengan tepat maksud fungsi ini (iaitu edit_contact berkelakuan dengan cara yang sama seperti fungsi edit_post, kecuali ia berfungsi dengan jenis siaran tersuai Kenalan kami).

Kami telah memberitahu WordPress untuk menggunakan map_meta_cap untuk memetakan fungsi di atas kepada fungsi mentah WordPress untuk penguatkuasaan.

Muat semula pentadbir WordPress sebagai mana-mana pengguna dan anda akan melihat bahawa jenis siaran tersuai Kenalan kami telah hilang daripada menu pentadbir WordPress:

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

Membina CRM asas dalam WordPress: Manfaatkan ciri penyesuaian

Ini berlaku kerana kita kini perlu memberitahu WordPress peranan mana yang mempunyai fungsi kenalan baharu (edit_contact, edit_contacts dsb.). Buat peranan pengguna WordPress baharu dan tetapkan ia keupayaan tersuai baharu Menggunakan add_role(), kami boleh mencipta peranan pengguna WordPress baharu dan menetapkan fungsi hubungan kami kepadanya. Peranan disimpan dalam data pilihan WordPress, jadi kami hanya perlu memanggil fungsi sekali sahaja. Untuk melakukan ini, tambahkan fungsi berikut pada penghujung fungsi __construct() dalam pemalam kami:

/**
* 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 );
	
}
Ciri ini akan menambah peranan baharu yang dipanggil CRM pada WordPress. Pengguna yang diberikan kepada peranan ini hanya boleh mengakses ciri Kenalan. Oleh itu, mereka hanya boleh mengakses jenis siaran tersuai Kenalan.

Sila ambil perhatian bahawa kami turut memberikan fungsi read kepada peranan ini. Ini diperlukan untuk membolehkan pengguna mengedit profil mereka (nama, kata laluan, dll.). Kami perlu membenarkan pengguna melakukan ini kerana WordPress secara automatik mengubah hala mereka ke skrin profil mereka apabila mereka log masuk.

Jika kami tidak menetapkan fungsi read, perkara berikut akan berlaku apabila pengguna log masuk: 在 WordPress 中构建基本 CRM:利用自定义功能

#🎜🎜# #🎜🎜#Membina CRM asas dalam WordPress: Memanfaatkan ciri tersuai # 🎜🎜##🎜🎜#Untuk menjalankan fungsi plugin_activation() kami sekali, kami menambah kod berikut pada penghujung fail pemalam: #🎜🎜#
/**
* Deactivation hook to unregister our existing Contacts Role
*/
function plugin_deactivation() {
	
	remove_role( 'crm' );
	
}
#🎜🎜#Ini memberitahu WordPress bahawa apabila mengaktifkan pemalam, ia perlu memanggil fungsi plugin_activation() dalam kelas WPTutsCRM. #🎜🎜# #🎜🎜#Buat/edit pengguna WordPress dan tetapkan mereka kepada peranan kenalan baharu#🎜🎜# #🎜🎜#Seterusnya, nyahaktifkan dan aktifkan semula pemalam anda, kemudian navigasi ke #🎜🎜#Pengguna > Tambah #🎜🎜# Baharu dalam antara muka pentadbir WordPress. #🎜🎜# #🎜🎜#Jika semuanya berjalan lancar, anda akan melihat peranan CRM baharu muncul dalam senarai juntai bawah: #🎜🎜##🎜🎜##🎜🎜# #🎜🎜##🎜🎜##🎜🎜##🎜🎜# Mari teruskan dan buat pengguna baharu bernama #🎜🎜#crm#🎜🎜# dan log masuk sebagai pengguna baharu itu. Kini kita sepatutnya melihat #🎜🎜#Kenalan#🎜🎜# kami, dengan #🎜🎜#Papan Pemuka#🎜🎜# dan #🎜🎜#Profil#🎜🎜# menjadi satu-satunya pilihan menu lain: #🎜🎜 ##🎜 ##🎜 #🎜🎜# #🎜🎜##🎜🎜##🎜🎜#

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

如果我们注销并以 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 );
		}
	}
}

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

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

让我们通过为作者角色添加一些功能来继续构建我们的 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 管理员停用我们的插件,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 系统。

Atas ialah kandungan terperinci Membina CRM asas dalam WordPress: Memanfaatkan ciri tersuai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn