Rumah > Artikel > pembangunan bahagian belakang > Membina CRM asas dalam WordPress: Memanfaatkan ciri tersuai
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.
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:
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', ), ) ); }
这里发生了两件事:
capability
参数定义了自己的功能,并将它们映射到其 Post 等效项。这可确保 WordPress 准确理解这些功能的含义(即 edit_contact
的行为方式与 edit_post
功能相同,只不过它适用于我们的联系人自定义帖子类型)。map_meta_cap
将上述功能映射到 WordPress 的原始功能,以便强制执行。以任何用户身份重新加载 WordPress 管理,您将看到我们的联系人自定义帖子类型已从 WordPress 管理菜单中消失:
发生这种情况是因为我们现在需要告诉 WordPress 哪些角色具有新的联系人功能(edit_contact
、edit_contacts
等)。
使用 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
功能,用户登录时会发生以下情况:
要运行我们的 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 );
Kami mentakrifkan keupayaan kami sendiri menggunakan parameter 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:
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:
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 管理菜单中仍然缺少联系人自定义帖子类型:
这个是因为我们只分配了 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 系统。
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!