Dies ist ein vierteiliges Lernprogramm, das das Thema, Benutzer und Rollen von WordPress behandelt. Die Serie behandelt die Architektur und das Design von Benutzerrollen in WordPress. die wichtigsten Funktionen für die Interaktion mit Benutzern und das Verwalten von Rollen und Fähigkeiten hervorheben; In den letzten beiden Artikeln werden wir ein Beispiel aus der Praxis erstellen, das die Nützlichkeit dieser API demonstriert.
Im letzten Tutorial haben wir ein reales Beispiel mit dem Rollen- und Funktionssystem von WordPress erstellt. Das System ist in einer einzelnen Klasse gekapselt. und kann verwendet werden, indem die Klasse initialisiert und Parameter an sie übergeben werden. Die Parameter sind das Array von Benutzer-IDs, ein anderes Array von Rollennamen. und auch einen Schalter, um allen Benutzern Zugriff zu gewähren. In der Praxis möchten Sie, dass der WordPress-Administrator diese Parameter ändern kann. und damit kontrollieren, welche Benutzer ein "client_dashboard
" Zugriff.
In diesem Lernprogramm erstellen wir eine Schnittstelle, die es dem Administrator ermöglicht, unsere Klasse automatisch zu initialisieren und mit den entsprechenden Daten zu füttern. Über die Benutzeroberfläche kann der Administrator Rollen und Benutzer auswählen. oder melden Sie sich für vollen Zugriff an.
Der Code für dieses neue Lernprogramm ist im selben Github-Repository verfügbar. Um auf den vorherigen Code zuzugreifen, navigieren Sie zum ersten Commit des Repositorys. Ich habe beschlossen, den Code nicht lizenziert zu lassen, so dass Sie ihn frei verwenden und ihn nach Belieben lizenzieren können.
Im Gegensatz zu Benutzern bietet WordPress keine Benutzeroberfläche für Rollen. Sie können vorhandene Rollen oder Funktionen nicht ohne die Hilfe eines Drittanbieter-Plugins hinzufügen, entfernen oder bearbeiten. Sie können jedoch eine Liste der vorhandenen Rollen in Ihrem Blog aus der Dropdown-Liste der Rollenauswahl erhalten, wenn Sie ein vorhandenes Benutzerprofil bearbeiten. Die Benutzeroberfläche beschränkt Sie darauf, nur eine Rolle für einen bestimmten Benutzer auszuwählen. Sie können Benutzern mit der Standardoberfläche von WordPress auch keine Funktionen zuweisen.
Aus diesem Grund ist es wichtig, dass Ihr Plugin die erforderliche Schnittstelle zum Konfigurieren der Benutzerzugriffsfunktionen bereitstellt. Ihre Plugin-Benutzer sollten sich nicht auf ein externes Plugin von Drittanbietern verlassen. Abhängig von der Komplexität Ihrer Benutzer und ihrem Wissen über die WordPress-Plattform möchten sie möglicherweise:
Wenn Sie etwas verwirrt sind, sprechen wir hier von einem Plugin mit zwei Dashboards: Eines für den Blog-Administrator, das über verwaltungsspezifische Funktionen und Einstellungen verfügt. und eine weitere für ausgewählte Benutzer, die über begrenzte Funktionen und Einstellungen verfügt. Dieses Beispiel gilt also nicht für alle Plugins da draußen. aber nur diejenigen, die Administrator- und Clientzugriff erfordern.
Dafür gibt es zwei verschiedene Schnittstellen: Eine zum Auswählen von Rollen und eine andere zum Auswählen von Benutzern. Für die Rollenauswahl müssen wir eine benutzerdefinierte Benutzeroberfläche erstellen, da WordPress keine visuelle Benutzeroberfläche hat. Für die Benutzerauswahl können wir die bereits vorhandene Benutzerprofilseite nutzen, indem Sie zusätzliche benutzerdefinierte Felder hinzufügen.
WordPress verfügt über eine kleine Anzahl vordefinierter Rollen: Administrator, Autor, Mitarbeiter, Editor und Abonnent. Erfahrene WordPress-Benutzer können ihre eigenen Rollen hinzufügen, um ihre Benutzer zu kategorisieren und zu verwalten. Aus diesem Grund sollte unsere Benutzeroberfläche alle Rollen in der Site abrufen und die Option bieten, die Rollen auszuwählen, die den Clientzugriff autorisieren. Ich habe auch die Gelegenheit genutzt, den "all" -Schalter auf die gleiche Schnittstelle zu setzen. Wenn Sie "Alle" aktivieren, werden Ihre anderen Einstellungen überschrieben.
Um die Benutzeroberfläche zu erstellen, verwenden wir die WordPress-Einstellungs-API und erstellen eine benutzerdefinierte Funktion, die die Kontrollkästchen anzeigt. Der folgende Code wird zur Registrierung der "wptuts_settings
"Einstellungsformular. Wir registrieren auch einen Abschnitt innerhalb dieses Formulars; und ein Feld innerhalb des Abschnitts.
// Registriert ein neues Einstellungsformular add_action ('admin_init', 'wptuts_settings_form'); function wptuts_settings_form () // Neues Einstellungsformular registrieren register_setting ('wptuts_settings', 'wptuts_settings'); // Einen neuen Abschnitt registrieren add_settings_section ('wptuts_settings', 'General Settings', 'wptuts_section', 'general_settings_form', 'Client Access'); // Ein neues Feld hinzufügen add_settings_field ('client_roles', 'Client Roles', 'wptuts_roles_check', 'general_settings_form', 'wptuts_settings', array ('client_roles', 'wptuts_settings')); function wptuts_section () return null;
Die Funktion add_settings_section ()
erfordert eine Funktion als dritten Parameter, die die Abschnittsbeschreibung zurückgibt. Um die Dinge einfach zu halten, habe ich eine Funktion übergeben, die null (oder nichts) zurückgibt..
Die Funktion add_settings_field ()
akzeptiert eine Feld-ID, eine Beschriftung, eine Funktion, den Abschnitt und das Formular, an das das Feld angehängt werden soll; und das Argument, das an die Feldfunktion übergeben werden soll. Die Feldfunktion gibt den HTML-Code des Feldes aus.
Die WordPress-Einstellungs-API wird zum Erstellen von Formularen verwendet, die ihren Inhalt automatisch in einer WordPress-Option speichern. Die Option ist "wptuts_settings
", und ist ein Array, das die verschiedenen Einstellungen unseres Plugins hat. Damit WordPress unsere Formularfelder erkennt, müssen wir sie zuerst mit den oben genannten Funktionen registrieren. Außerdem muss jedem Feld der richtige Name zugewiesen werden. Jedes Feld wird also habe einen Namen im Formular wptuts [Feldname]
.
In unserem Fall haben wir eine unvorhersehbare Anzahl von Rollen. und somit eine unvorhersehbare Anzahl von Kontrollkästchen. Es ist nicht sinnvoll, für jede Rolle ein Feld anzulegen und zu registrieren. Glücklicherweise unterstützt HTML Array-Elemente. So nennen wir unsere Checkboxen wptuts [Feldname] [Rolle_1]
, wptuts [Feldname] [Rolle_2]
, wptuts [Feldname] [Rolle_n]
… WordPress erkennt dieses HTML-Array-Element und speichert es als PHP-Array.
Unten ist der Inhalt des "wptuts_settings
"Array, wenn die"alles
","Autor
", und "Teilnehmer
"Ankreuzfelder sind ausgewählt.
'wptuts_settings' => array 'client_roles' => array 'all' => string 'on' (length = 2) 'author' => string 'on' (length = 2) 'abonnent' => string 'on' ( Länge = 2)
Die mit dem Feld verknüpfte Funktion lautet "wptuts_roles_check
". Es akzeptiert ein Array, das die Einstellungs-ID und den Feldnamen hat. Dies macht unsere Funktion in anderen Feldern wieder verwendbar. Sie können diesen Parameter übersehen und die Einstellungs-ID und den Feldnamen in Ihre Funktion hartcodieren.
Die Funktion durchläuft ein Array von Rollennamen, die von "$ wp_roles-> get_names ()
". Außerdem wird die Administratorrolle aufgehoben und ein zusätzliches Kontrollkästchen" Alle "hinzugefügt..
/ ** * Generiert die Rollen-Kontrollkästchen in Form von * * @param array $ param * / function wptuts_roles_check ($ param) // Rollenliste $ settings = get_option ($ param [1]); if (isset ($ einstellungen [$ param [0]])) $ val = $ einstellungen [$ param [0]]; else $ val = "; // HTML-Code generieren // WP-Rollen abrufen globale $ wp_roles; $ rolls = $ wp_roles-> get_names (); unset ($ rolls ['administrator']); // HTML-Code generieren if ($ val ['all'] === 'on') echo ' Alles
'; else echo ' Alles
'; foreach ($ Rollen als $ key => $ value) if ($ val [$ key] === 'on') echo ' '. $ wert. '
'; else echo ' '. $ wert. '
';
Wie im ersten Tutorial dieser Serie beschrieben, können Benutzer zusätzliche Daten in Form von Schlüssel / Wert-Paaren erhalten. Die Funktionen zum Hinzufügen, Aktualisieren und Entfernen von Metadaten von Benutzern wurden im zweiten Lernprogramm behandelt. In diesem Teil erfahren Sie, wie Sie jeder Benutzerprofilseite einen Abschnitt hinzufügen und die Metadaten der Benutzer entsprechend aktualisieren.
WordPress bietet vier Aktionen, um sich mit der Benutzerprofilseite zu verbinden. Zwei Aktionen zum Hinzufügen neuer Felder zur Bearbeitungsseite; und zwei weitere Aktionen zum Behandeln der HTTP-POST-Anforderung. Der Unterschied zwischen den "show_user_profile
"Aktion und"edit_user_profile
"Aktion ist, dass der letztere a WP_User
Objekt für den zu bearbeitenden Benutzer. Der Unterschied zwischen den beiden anderen Maßnahmen ist jedoch nicht klar.
/ ** * Benutzer-Metabox-Hooks * / private Funktion metabox_user () // Anzeige der Metabox add_action ('show_user_profile', array (& $ this, 'display_metabox')); add_action ('edit_user_profile', array (& $ this, 'display_metabox')); // Update speichern add_action ('personal_options_update', array (& $ this, 'update_metabox')); add_action ('edit_user_profile_update', array (& $ this, 'update_metabox'));
Im Gegensatz zur Einstellungs-API gibt es keine Einschränkungen oder Anforderungen an den HTML-Code, den die Funktion ausgibt. WordPress speichert die Metadaten nicht. Sie können sie also beliebig bearbeiten.
/ ** * Anzeige des benutzerdefinierten Feldes * * @param-Objekt $ user * / öffentliche Funktion display_metabox ($ user) $ user_meta = get_user_meta ($ user-> ID, 'wptuts_client', true); if ($ user_meta) $ checked = 'checked'; else $ checked = "; drucken <<