Wir haben uns angeschaut, wie man ein einfaches CRM-System in WordPress erstellt. Im letzten Teil dieser Serie haben wir uns mit der Verwendung von Rollen befasst, um den Benutzerzugriff auf Teile der WordPress-Administratoroberfläche einzuschränken.
Heute besprechen wir, wie Sie mit benutzerdefinierten Funktionen den Zugriff nur auf die benutzerdefinierten Beitragstypen Ihrer Kontakte beschränken.
Während wir zuvor die Zugriffsebenen für WordPress-Benutzer reduziert haben, können Benutzer weiterhin Beiträge und Kommentare verwalten, indem sie ihnen die Rolle „Editor“ oder „Autor“ zuweisen. Keine dieser Funktionen ist für uns nützlich, daher müssen wir den Zugriff weiter einschränken und bestimmten Benutzern nur den Zugriff auf den benutzerdefinierten Beitragstyp „Kontakt“ ermöglichen.
Wir können dies tun, indem wir:
Durch die Registrierung benutzerdefinierter Funktionen können wir später definieren, welche WordPress-Rollen Zugriff auf diese Funktionen haben, beispielsweise ob Autoren neue Kontakte erstellen können.
Lassen Sie uns die Plugin-Datei bearbeiten und das register_post_type()
函数调用,将 capability_type => 'post'
durch Folgendes ersetzen:
'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,
Unsere register_post_type()
Funktion sollte nun so aussehen:
/** * 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', ), ) ); }
Hier passieren zwei Dinge:
capability
参数定义了自己的功能,并将它们映射到其 Post 等效项。这可确保 WordPress 准确理解这些功能的含义(即 edit_contact
的行为方式与 edit_post
für die gleiche Funktionalität, außer dass es für unseren benutzerdefinierten Beitragstyp „Kontakte“ funktioniert. map_meta_cap
zu verwenden, um die oben genannte Funktionalität zu Durchsetzungszwecken der nativen Funktionalität von WordPress zuzuordnen. Laden Sie den WordPress-Administrator als beliebiger Benutzer neu und Sie werden sehen, dass unser benutzerdefinierter Beitragstyp „Kontakt“ aus dem WordPress-Administratormenü verschwunden ist:
Dies geschieht, weil wir WordPress jetzt mitteilen müssen, welche Rollen über die neue Kontaktfunktionalität verfügen (edit_contact
、edit_contacts
usw.).
Mit add_role()
können wir eine neue WordPress-Benutzerrolle erstellen und ihr unsere Kontakte-Funktionalität zuweisen. Die Rolle wird in den WordPress-Optionsdaten gespeichert, sodass wir die Funktion nur einmal aufrufen müssen.
Fügen Sie dazu am Ende der __construct()
-Funktion in unserem Plugin die folgende Funktion hinzu:
/** * 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 ); }
Diese Funktion fügt WordPress eine neue Rolle namens CRM hinzu. Benutzer, denen diese Rolle zugewiesen ist, können nur auf die Funktion „Kontakte“ zugreifen. Daher können sie nur auf den benutzerdefinierten Beitragstyp „Kontakt“ zugreifen.
Bitte beachten Sie, dass wir dieser Rolle auch read
Funktionalität zugewiesen haben. Dies ist erforderlich, damit Benutzer ihr Profil (Name, Passwort usw.) bearbeiten können. Wir müssen Benutzern dies ermöglichen, da WordPress sie beim Anmelden automatisch zu ihrem Profilbildschirm weiterleitet.
Wenn wir die Funktion read
nicht zuweisen würden, würde beim Anmelden des Benutzers Folgendes passieren:
Um unsere plugin_activation()
-Funktion einmal auszuführen, fügen wir den folgenden Code am Ende der Plugin-Datei hinzu:
register_activation_hook( __FILE__, array( &$wpTutsCRM, 'plugin_activation' ) );
Dadurch wird WordPress mitgeteilt, dass es beim Aktivieren des Plugins die Funktion WPTutsCRM
类中的 plugin_activation()
in der Klasse WPTutsCRM
aufrufen muss.
Als nächstes deaktivieren und reaktivieren Sie Ihr Plugin und navigieren Sie zu Benutzer > Neu hinzufügen in der WordPress-Administratoroberfläche.
Wenn alles gut geht, wird die neue CRM-Rolle in der Dropdown-Liste angezeigt:
Lass uns fortfahren und einen neuen Benutzer namens crm erstellen und uns als dieser neue Benutzer anmelden. Wir sollten jetzt unsere Kontakte sehen, wobei Dashboard und Profil die einzigen anderen Menüoptionen sind:
如果我们注销并以 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 系统。
Das obige ist der detaillierte Inhalt vonErstellen eines grundlegenden CRM in WordPress: Nutzung benutzerdefinierter Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!