Wir haben untersucht, wie Sie ein einfaches CRM-System in WordPress erstellen können. Im letzten Teil dieser Serie haben wir untersucht, wie Sie mithilfe von Rollen den Benutzerzugriff auf Teile der WordPress-Administrationsoberfläche beschränken können.
Heute erfahren Sie, wie Sie den Zugriff auf den benutzerdefinierten Kontakttyp "Kontakte" mithilfe von benutzerdefinierten Funktionen beschränken können.
Während wir zuvor die Zugriffsrechte unserer WordPress-Benutzer reduziert haben, können sie durch das Zuweisen einer Bearbeiter- oder Autorenrolle weiterhin Beiträge und Kommentare verwalten. Keine dieser Funktionen ist für uns nützlich. Daher müssen wir den Zugriff weiter einschränken, sodass zugewiesene Benutzer nur Zugriff auf den benutzerdefinierten Kontakttyp "Kontakte" haben.
Wir können dies durch:
Wenn Sie benutzerdefinierte Funktionen registrieren, können Sie später definieren, welche WordPress-Rollen auf diese Funktionen zugreifen können. Beispielsweise kann ein Autor einen neuen Kontakt erstellen.
Lassen Sie uns die Plugin-Dateien bearbeiten register_post_type ()
Funktionsaufruf, Ersetzen Capability_type => 'post'
mit den folgenden:
'funktionen' => array ('edit_others_posts' => 'edit_others_contacts', 'delete_others_posts' => 'delete_others_contacts', 'delete_private_posts' = '' delete_private_contacts '),' edit_private_contacts ',' _ ',' edit_published_posts '=>' edit_published_contacts ',' publish_posts '=>' publish_contacts ',' delete_published_posts '=>' delete_published_contacts ',' edit_posts '=>' edit_contacts ',' delete_conts ' => 'edit_contact', 'read_post' => 'read_contact', 'delete_post' => 'delete_contact',), 'map_meta_cap' => true,
Unsere register_post_type ()
Funktion sollte jetzt so aussehen:
/ ** * Registriert einen benutzerdefinierten Post-Typ mit dem Namen contact * / function register_custom_post_type () register_post_type ('contact', array ('labels' => array ('name' => _x ('contact', 'post type general name' , 'tuts-crm'), 'singular_name' => _x ('Kontakt', 'Beitragstyp, Singularname', 'tuts-crm'), 'menu_name' => _x ('Kontakte', 'Admin-Menü', ' tuts-crm '),' name_admin_bar '=> _x (' Kontakt ',' Neues in der Administrationsleiste hinzufügen ',' tuts-crm '),' add_new '=> _x (' Neu hinzufügen ',' Kontakt ',' tuts -crm '),' add_new_item '=> __ (' Neuen Kontakt hinzufügen ',' tuts-crm '),' new_item '=> __ (' Neuer Kontakt ',' tuts-crm '),' edit_item '=> __ ('Kontakt bearbeiten', 'tuts-crm'), 'view_item' => __ ('Kontakt anzeigen', 'tuts-crm'), 'all_items' => __ ('Alle Kontakte', 'tuts-crm') , 'search_items' => __ ('Kontakte suchen', 'tuts-crm'), 'parent_item_colon' => __ ('Übergeordnete Kontakte:', 'tuts-crm'), 'not_found' => __ ('Keine Kontakte found. ',' tuts-crm '),' not_found_in_trash '=> __ (' Keine Kontakte im Papierkorb gefunden. ',' tuts-crm '),), // Frontend' has_archive '=> false, 'public' => false, 'publicly_queryable' => false, // Admin-Fähigkeiten '=> array (' edit_others_posts '=>' edit_others_contacts '),' delete_others_posts '=>' delete_others_contacts ',' delete_private_posts '=>' delete_proint_contacts ',' edit_private_posts '=' edit_private_contacts ',' read_private_contacts ',' edit_published_posts '=>' edit_published_posts '=>' edit_published_posts '=>' edit_published_posts '=> edit_published_posts' = 'edit_published_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, 'unterstützt' => array ('title) ',' Autor ',' Kommentare ',),));
Hier passieren zwei Dinge:
Fähigkeiten
Argument, Zuordnung zu ihren Post-Äquivalenten. Dadurch wird sichergestellt, dass WordPress genau versteht, was die Funktionen bedeuten (d. H. Kontakt bearbeiten
verhält sich genauso wie das Beitrag bearbeiten
Fähigkeit, außer dass es für unseren Kontaktpostart ist.map_meta_cap
, also werden sie durchgesetzt.Laden Sie die WordPress-Administration neu wie ein anderer Benutzer, und Sie sehen, dass der benutzerdefinierte Posttyp für Kontakte aus dem WordPress-Verwaltungsmenü verschwunden ist:
Dies geschah, weil wir WordPress jetzt mitteilen müssen, welche Rollen unsere neuen Kontaktfunktionen haben (Kontakt bearbeiten
, edit_contacts
, usw).
Verwenden add_role ()
, Wir können eine neue WordPress-Benutzerrolle erstellen und ihr unsere Kontaktmöglichkeiten zuweisen. Die Rolle ist in den WordPress Options-Daten gespeichert, sodass wir diese Funktion nur einmal aufrufen müssen.
Fügen Sie dazu die folgende Funktion unter dem Ende von hinzu __konstruieren()
Funktion in unserem Plugin:
/ ** * Aktivierungs-Hook zum Registrieren einer neuen Rolle und Zuweisen unserer Kontaktfunktionen * / function plugin_activation () // Definieren Sie unsere benutzerdefinierten Funktionen. $ 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 '=> true,' edit_contact '=> true,' read_contact '=> true,' delete_contact '=> true,' read '=> true,); // Erstelle unsere CRM-Rolle und weise die benutzerdefinierten Funktionen zu. Add_role ('crm', __ ('CRM', 'tuts-crm'), $ customCaps);
Diese Funktion fügt eine neue Rolle namens CRM zu WordPress hinzu. Benutzer, die dieser Rolle zugewiesen sind, haben nur Zugriff auf die Kontaktfunktionen. Daher haben sie nur Zugriff auf die benutzerdefinierte Post-Kontaktart.
Beachten Sie, dass wir auch das zuweisen lesen
Fähigkeit zu dieser Rolle. Dies ist erforderlich, damit Benutzer ihr Profil bearbeiten können (Name, Passwort usw.). Wir müssen Benutzern dies erlauben, da WordPress sie bei der Anmeldung automatisch zum Profilbildschirm umleitet.
Wenn wir das nicht vergeben haben lesen
Dies würde passieren, wenn sich der Benutzer anmeldet:
Unsere laufen lassen plugin_activation ()
Funktion einmal, fügen wir den folgenden Code am Ende unserer Plugin-Datei hinzu:
register_activation_hook (__FILE__, array (& $ wpTutsCRM, 'plugin_activation'));
Dies teilt WordPress mit, dass es bei der Aktivierung des Plugins die plugin_activation ()
Funktion in unserem WPTutsCRM
Klasse.
Deaktivieren Sie anschließend Ihr Plugin und aktivieren Sie es erneut. Navigieren Sie dann zu Benutzer> Neu hinzufügen in der WordPress-Administrationsoberfläche.
Wenn alles erfolgreich funktioniert hat, wird die neue CRM-Rolle in der Dropdown-Liste angezeigt:
Lassen Sie uns einen neuen Benutzer mit dem Namen erstellen crm, und melden Sie sich als dieser neue Benutzer an. Wir sollten jetzt unsere sehen Kontakte, mit dem Instrumententafel und Profil als einzige andere Menüoptionen:
Wenn wir uns abmelden und als WordPress-Administrator, -Editor oder -Ersteller erneut anmelden, werden Sie feststellen, dass der benutzerdefinierte Beitragstyp für Kontakte im WordPress-Verwaltungsmenü noch fehlt:
Das liegt daran, dass wir nur die vergeben haben CRM
Rolle bei den Funktionen des benutzerdefinierten Posttyps. Daher haben alle anderen Benutzerrollen immer noch keinen Zugriff auf diesen Beitragstyp.
Um dieses Problem zu beheben, weisen wir die benutzerdefinierten Funktionen den Administrator- und Editorrollen zu, indem Sie den folgenden Code am Ende der hinzufügen plugin_activation ()
Funktion:
// Benutzerdefinierte Funktionen zu Admin- und Editorrollen hinzufügen $ rolls = array ('administrator', 'editor'); foreach ($ rollen als $ roleName) // rolle rolle $ role = get_role ($ roleName); // Rolle prüfen, ob vorhanden ist if (is_null ($ role)) continue; // Durchlaufen Sie unsere benutzerdefinierten Funktionen und fügen Sie sie // dieser Rolle hinzu, wenn sie füreach aktiviert sind ($ customCaps als $ fähigkeit => $ enabled) if ($ enabled) // Fügen Sie die Funktion $ role-> add_cap ($ Fähigkeit);
Hier durchlaufen wir die Rollen, denen wir die benutzerdefinierten Funktionen zuweisen möchten, und prüfen, ob die Rolle vorhanden ist. Wenn dies der Fall ist, durchlaufen wir die zuvor definierten benutzerdefinierten Funktionen und fügen sie der Rolle hinzu.
Sie werden feststellen, dass wir der Autor-Rolle keine benutzerdefinierten Funktionen hinzugefügt haben. Dies liegt daran, dass wir nicht alle Funktionen zuweisen möchten, da die Autorenrolle normalerweise nur den Schreibzugriff auf die eigenen Beiträge des Benutzers erlaubt.
Lass uns weiter bauen plugin_activation ()
Funktion durch Hinzufügen einiger Funktionen für die Autorenrolle:
// Fügen Sie der Autorolle einige unserer benutzerdefinierten Funktionen hinzu. $ 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);
Unsere ganze Funktion sollte jetzt so aussehen:
/ ** * Aktivierungs-Hook zum Registrieren einer neuen Rolle und Zuweisen unserer Kontaktfunktionen * / function plugin_activation () // Definieren Sie unsere benutzerdefinierten Funktionen. $ 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 '=> true,' edit_contact '=> true,' read_contact '=> true,' delete_contact '=> true,' read '=> true,); // Erstelle unsere CRM-Rolle und weise die benutzerdefinierten Funktionen zu. Add_role ('crm', __ ('CRM', 'tuts-crm'), $ customCaps); // Benutzerdefinierte Funktionen zu Admin- und Editorrollen hinzufügen $ rolls = array ('administrator', 'editor'); foreach ($ rollen als $ roleName) // rolle rolle $ role = get_role ($ roleName); // Rolle prüfen, ob vorhanden ist if (is_null ($ role)) continue; // Durchlaufen Sie unsere benutzerdefinierten Funktionen und fügen Sie sie // dieser Rolle hinzu, wenn sie füreach aktiviert sind ($ customCaps als $ fähigkeit => $ enabled) if ($ enabled) // Fügen Sie die Funktion $ role-> add_cap ($ Fähigkeit); // Fügen Sie der Author-Rolle einige unserer benutzerdefinierten Funktionen hinzu. $ 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);
Wenn Sie sich als Administrator, Editor oder Autor anmelden, wird jetzt die Option "Kontakte" im WordPress-Verwaltungsmenü angezeigt:
Wenn der WordPress Administrator unser Plugin deaktiviert, wird das CRM
Die Rolle bleibt in WordPress. Da jedoch kein anderes Plugin oder Teil von WordPress diese Rolle verwendet, ist es überflüssig. Daher müssen wir sicherstellen, dass die CRM
Die Rolle wird entfernt, wenn unser Plugin deaktiviert ist.
Fügen Sie dazu die folgende Funktion unter dem hinzu plugin_activation ()
Funktion:
/ ** * Deaktivierungshaken zum Aufheben der Registrierung unserer vorhandenen Kontaktrolle * / function plugin_deactivation () remove_role ('crm');
Genauso haben wir die register_activation_hook ()
Funktion Wenn unser Plugin aktiviert ist, können wir die register_deactivation_hook ()
wenn unser Plugin deaktiviert wird. Fügen wir das Folgende unter dem hinzu register_activation_hook
Anruf:
register_deactivation_hook (__FILE__, array (& $ wpTutsCRM, 'plugin_deactivation'));
Wenn unser Plugin deaktiviert ist, wird unser CRM
Rolle wird nicht mehr verfügbar sein.
Wir haben erfolgreich ein einfaches CRM-System in WordPress entwickelt, das die Verwendung von benutzerdefinierten Post-Typen, Post-Meta-Feldern und die Integration von Drittanbieter-Plugins zum Speichern von Informationen über unsere Kunden und Interessenten untersucht.
In diesem Lernprogramm wurden auch einige der fortgeschritteneren Aspekte von WordPress behandelt. Dazu wurden erweiterte benutzerdefinierte Felddaten über WP_List_Table-Spalten angezeigt, unsere Post-Abfrage gefiltert, um unsere erweiterten benutzerdefinierten Felder zu durchsuchen, und der Benutzerzugriff über Rollen und Funktionen verwaltet, um den Zugriff auf nur unsere eigenen zu beschränken CRM-System.