WordPress-Funktionen und -Funktionen Erstellen einer Admin-Oberfläche

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.


Einführung

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.


Warum brauchen wir eine Schnittstelle??

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:

  • Erlauben Sie den Zugriff für alle Benutzer.
  • Beschränken Sie den Zugriff auf einige Benutzer.
  • Beschränken Sie den Zugriff auf eine oder mehrere Rollen.
  • Eine Kombination von Benutzern und Rollen.

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.


Erstellen der Rollenauswahlleiste

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.

Verwenden der WordPress-Einstellungs-API

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)

Ausgabe des Feld-HTML-Codes

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. '
';

Benutzerdefinierte Benutzerprofilfelder hinzufügen

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.

Schritt 1 Verbindung zum Benutzerprofil

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

Schritt 2 Anzeigen des benutzerdefinierten Felds

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 <<
Wptuts + Client
Aktivieren Sie den Zugriff auf das Wptuts + Plugin-Client-Dashboard
bilden;

Schritt 3 Speichern der benutzerdefinierten Benutzerfelder

Wie bereits erwähnt, müssen wir mit einer anderen Funktion sparen. Diese Funktion wird aufgerufen, wenn der Benutzer auf die Schaltfläche "Profil aktualisieren" klickt und das HTML-Formular in einer POST-Anforderung gesendet wird.

 / ** * Aktualisieren Sie die Metadaten des Benutzers. * * @Param integer $ user_id * / public function update_metabox ($ user_id) if (isset ($ _ POST ['wptuts_client']) && $ _POST ['wptuts_client'] ===== 'ein') $ checked = true;  else $ checked = false;  update_user_meta ($ user_id, 'wptuts_client', $ checked); 

Aktualisierung der Klasseninitialisierung

Schließlich müssen wir unsere Klasse aktualisieren. Im vorherigen Tutorial wurde unsere Klasse mit drei Parametern konstruiert. Wir brauchen diese Parameter jetzt nicht; und unsere Funktion sollte sie selbst aus den von den Schnittstellen gespeicherten Daten abrufen.

Wir haben zwei Datenquellen zum Abrufen: das "wptuts_settings"Option und die Metadaten des Benutzers. Hoffentlich war das Abrufen der Metadaten mit der Funktion ziemlich einfach"get_users ()"was genau das zurückgibt, was wir brauchen (ein Array von Benutzer-IDs), indem einfach der Metaschlüssel und der Wert angegeben werden, den der Benutzer haben sollte.

 / ** * Setze die Berechtigungsentitäten * * @param boolean $ all * @param array $ Rollen * @param array $ users * / private Funktion set_entities () $ settings = get_option ('wptuts_settings'); $ rollen = $ einstellungen ['client_roles']; // ALL Regel if (isset ($ rolls ['all']) && $ rolls ['all'] === 'on') $ this-> all = true;  else $ this-> all = false;  // Rollenregel $ this-> rollen = $ rollen; unset ($ this-> rolls ['all']); // Benutzerregel $ this-> users = get_users (array ('meta_key' => 'wptuts_client', 'meta_value' => true, 'fields' => 'ID')); 

Fazit

Das ist es! Jetzt haben wir im WordPress-Admin eine Schnittstelle für Rollen und Fähigkeiten. Teilen Sie uns in den Kommentaren unten mit, was Sie über Rollen und Fähigkeiten denken und welche Funktionen Sie zu der in dieser Serie erstellten Klasse und Schnittstelle hinzufügen könnten.