WordPress-Funktionen und -Funktionen Ein Beispiel aus der Praxis

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; und im letzten Tutorial werden wir ein Beispiel aus der Praxis erstellen, das die Nützlichkeit dieser API demonstriert.


Einführung

Dieses Tutorial konzentriert sich auf die Entwicklung einer praktischen Lösung mithilfe des Rollen- und Funktionssystems von WordPress. Wenn Sie die letzten beiden Tutorials verpasst haben, empfehle ich Ihnen dringend, sie auszuprobieren. Der erste Teil "WordPress-Funktionen und -Funktionen: Die Grundlagen" erläutert den Aufbau dieses Systems. Der zweite Teil "WordPress-Funktionen und -Funktionen: Funktionen von Note" konzentriert sich auf die Funktionen und Klassen, die WordPress für die Interaktion mit dem System anbietet.

Die in diesem Tutorial vorgeschlagene Lösung ist dieselbe, die ich für eines meiner Premium-WordPress-Plugins verwende. Ich habe es nach verschiedenen Ansätzen gewählt. Es ist einfach, kurz und in einer Klasse zusammengefasst. Sie können es leicht für Ihr eigenes Plugin anpassen. Der Code ist auf GitHub verfügbar. und ist nicht lizenziert. Es gibt auch keine Garantien und Sie können es nach Belieben verwenden und lizenzieren.


Schritt 1 Das Szenario

Wir bauen ein WordPress-Plugin, das über ein spezielles Client-Admin-Panel verfügt. Dieses Admin-Panel sollte nur für eine begrenzte Anzahl von Benutzern zugänglich sein. Diese Benutzer können vom Blog-Administrator ausgewählt werden. Er kann verschiedenen Rollen, Benutzern oder allen Benutzern den Zugriff auf das Clientadministrationsfeld oder auf die Funktionen ermöglichen.

Abgesehen davon benötigen wir einen eingeschränkten Zugriff auf die Medienbibliothek für Benutzer mit Zugriff auf das Client Panel. WordPress verfügt über eine spezielle Funktion, auf Dateien zuzugreifen und sie in die Medienbibliothek hochzuladen: "Daten hochladenDies gibt jedoch dem Benutzer (oder seiner Rolle) uneingeschränkten Zugriff auf die Medienbibliothek. Dies ist keine gute Sache, insbesondere, dass Fotos (oder Dateien) nicht unter verschiedenen Kategorien hierarchisiert werden können, in denen Sie den Zugriff für jede einzelne einschränken können.

Wir müssen den Zugriff auf die Medienbibliothek nur auf die Dateien beschränken, die der Benutzer hochgeladen hat. Er sollte keinen Zugriff auf die Uploads anderer Benutzer haben. Diese Einschränkung sollte nur auf die Benutzer angewendet werden, die nichtDaten hochladen"Funktion. Andere Benutzer und Rollen sind nicht besorgt über diese Einschränkung, da sie bereits vollen Zugriff auf die Medienbibliothek haben.

Unser Blog wird diese vier Kategorien von Benutzern haben:

Die ersten beiden Benutzergruppen sind diejenigen, die keinen Zugriff auf das Plugin-Client-Panel haben. Ich habe die Tatsache hervorgehoben, dass es Benutzer gibt, die Zugriff auf die Medienbibliothek haben, und eine Gruppe, die dies nicht tut. Es ist wichtig, dass sich unsere Lösung nicht auf die ersten beiden Kategorien auswirkt und ihre Fähigkeiten unangetastet lässt.

In diesem Sinne sollte unsere Klasse zwei Dinge tun:

  • Legen Sie die richtigen Berechtigungen für die dritte und vierte Gruppe von Benutzern fest
  • Aktivieren Sie einen eingeschränkten Zugriff auf die Medienbibliothek für die vierte Kategorie. Es sollte sichergestellt werden, dass diese Kategorie von Benutzern nach dem Deaktivieren des Plugins oder dem Ändern der Benutzerrechte ihre ursprünglichen Berechtigungen zurückerhält.

Schritt 2 Die Plugin-Schnittstelle

Bevor wir unsere Klasse erstellen, haben wir eine tiefere Vorstellung von dem Plugin. Das Plugin hat eine ziemlich einfache Struktur. Es besteht aus zwei verschiedenen Menüs: Eines für den Administrator. Es dient als Verwaltungsbereich und ist nur für Benutzer mit der Fähigkeit "Verwaltungsoptionen". Das zweite Menü ist für Clients und gibt Zugriff auf das Client Panel. Dieses Panel erfordert ein"wptuts_client_page"Fähigkeit.

Diese Funktion ist in WordPress nicht vorhanden. Wir müssen es hinzufügen und den angegebenen Benutzern oder Rollen zuweisen. Aber vorher werfen wir einen Blick auf das Plugin.

 / * Plugin Name: WordPress Roles Plugin Plugin URI: https://github.com/omarabid/WordPress-Roles-Plugin Beschreibung: Ein WordPress Roles Plugin Autor: Abid Omar Autor URI: http://omarabid.com Version: 1.0 * / // Hinzufügen eines Admin-Benutzermenüs zum WordPress-Dashboard add_action ('admin_menu', 'wptuts_admin_menu'); Funktion wptuts_admin_menu () add_menu_page ('Admin-Zugriff', 'Admin-Zugriff', 'manage_options', 'wptuts-admin', 'wptuts_admin_page');  function wptuts_admin_page () echo 'Admin-Seite';  // Hinzufügen eines Client-Benutzermenüs zum WordPress-Dashboard add_action ('admin_menu', 'wptuts_client_menu'); Funktion wptuts_client_menu () add_menu_page ('Client Access', 'Client Access', 'wptuts_client', 'wptuts-client', 'wptuts_client_page');  function wptuts_client_page () echo 'Kundenseite'; 

Wir haben zwei "admin_menu"Aktions-Hooks, die das Admin-Menü sowohl für den Administrator als auch für den Client hinzufügen. Wir können es auf nur einen Hook verkürzen, der beide hinzufügt. Ich ziehe es jedoch vor, die beiden zu trennen."add_menu_page"Funktion hebt eine andere Funktion an, die den Seiteninhalt anzeigt.

Als Nächstes müssen wir unsere Rollenklasse initialisieren. Der Klassencode wird in einer anderen Datei abgelegt. und der Initialisierungsprozess wird während des "drin"Haken, der dafür sorgt, dass WordPress vollständig geladen ist.

Die Konstruktorfunktion akzeptiert drei Parameter:

  • $ alle Boolean (optional) Wenn Sie dem Client allen Benutzern im Blog Zugriff gewähren möchten, können Sie dies auf true setzen und die übrigen Parameter ignorieren.
  • $ rollen Array (optional) Ein Array mit Rollen-IDs, die Zugriff auf das Client-Panel haben.
  • $ Benutzer Array (optional) Ein Array mit Benutzernamen, die Zugriff auf das Client-Panel haben.
 // lädt und initialisiert die Rollenklasse add_action ('init', 'wptuts_start_plugin'); Funktion wptuts_start_plugin () required_once ('rolls_class.php'); $ all = falsch; $ Rollen = Array ('Abonnent'); $ Benutzer = Array (3); neue wpttuts_roles ($ all, $ role, $ users); 

Schritt 3 Die Rollenklasse

Die Eigenschaften

Die Klasse hat nur 3 Eigenschaften: $ alle, $ rollen und $ Benutzer. Dies sind die gleichen Variablen, die Sie an die Konstruktorfunktion übergeben. Der Wert der Variablen wird in unserem Beispiel nicht geändert. In einem praktischen Fall möchten Sie jedoch möglicherweise mit einer anderen Quelle verschmelzen. Dafür haben Sie die set_entities Funktion. Sie können es an Ihre eigenen Bedürfnisse anpassen.

 / ** * @var boolean * / private $ all; / ** * @ var array * / private $ rollen; / ** * @ var array * / private $ Benutzer; / ** * Setze die Berechtigungsentitäten * * @param boolean $ all * @param array $ rollen * @param array $ users * / private Funktion set_entities ($ all, $ role, $ users) $ this-> all = $ alles; $ this-> rollen = $ rollen; $ this-> users = $ users; 

Die Konstruktorfunktion

In einem ersten Schritt initialisiert die Konstruktorfunktion das $ alle, $ rollen und $ Benutzer Variablen mit der set_entitites () Funktion. Als Nächstes wird eine private Funktion zum Festlegen der Funktionen und eine weitere für die Einschränkung der Medienbibliothek aufgerufen. Dies sind genau die Schritte, die wir in unserem Szenario definiert haben.

 / ** * Erstellt eine neue Instanz der Rollenklasse * * @param boolean $ all * @param array $ rollen * @param array $ users * / function __construct ($ all = false, $ rolls = array (), $ users) = array ()) // Setze die erlaubten Entitäten $ this-> set_entities ($ all, $ role, $ users); // Benutzerzugriffsberechtigung setzen $ this-> set_permissions (); // Medienbibliotheksfilter $ this-> media_filter (); 

Statische Funktionen

Statische Funktionen erfordern keine Klasseninitialisierung. Sie ähneln unabhängigen Funktionen, sind jedoch nur mit der angegebenen Klasse verknüpft. Ich habe beschlossen, einige Funktionen statisch zu halten, da sie unabhängig voneinander verwendet werden können. und Sie könnten sie in einem anderen Kontext nützlich finden.

Diese Funktionen sind filter_roles () und filter_users (); welche mit zwei anderen Funktionen verbunden sind role_has_caps () und user_has_caps (). Die Funktionen spielen die Rolle eines Filters. Sie filtern Rollen (oder Benutzer) basierend auf Funktionen, die sie haben und nicht haben.

Beide Funktionen akzeptieren zwei Argumente:

  • $ include Array Eine Reihe von Funktionen, über die die Rolle verfügt.
  • $ ausschließen Array Eine Reihe von Funktionen, über die die Rolle nicht verfügt.
 / ** * Alle Rollen des Blogs nach Funktionen filtern * * @static * @param array $ include Array von Funktionen, die * @param array $ enthalten sollen. Exclude Array von Funktionen, um * @return array * / statische Funktionsfilter_roles ($.) Auszuschließen include, $ exclude) $ gefilterte_Regel = Array (); globale $ wp_roles; $ rolls = $ wp_roles-> get_names (); foreach ($ rollen als $ role_id => $ Rollenname) $ role = get_role ($ role_id); if (self :: role_has_caps ($ role, $ include) &&! self :: role_has_caps ($ role, $ exclude)) $ gefilterte_Rollen [] = $ role_id;  return $ gefilterte_Rollen;  / ** * Alle Benutzer des Blogs nach Funktionen filtern * * @static * @param array $ include Array von Funktionen, die * @param array $ enthalten sollen. Exclude Array von Funktionen, um * @return array * / statische Funktion filter_users ( $ include, $ exclude) $ gefilterte Benutzer = array (); $ users = get_users (); foreach ($ Benutzer als $ Benutzer) $ Benutzer = neuer WP_User ($ Benutzer-> ID); if (self :: user_has_caps ($ user, $ include) &&! self :: user_has_caps ($ user, $ exclude)) $ gefilterte Benutzer [] = $ user-> ID;  return $ gefilterte Benutzer; 

Die Funktionen durchlaufen alle Rollen und Benutzer in der Datenbank. Für jede Rolle (oder Benutzer) wird geprüft, ob sie über die erforderlichen Funktionen verfügt und nicht über die Funktionen verfügt, die ausgeschlossen werden können. Diese Überprüfung erfolgt mit der role_has_caps () und user_has_caps () Funktionen.

Diese beiden Funktionen (role_has_caps () und user_has_caps ()) akzeptiere zwei Argumente:

  • $ rolle (oder $ Benutzer) String Die Rollen-ID oder die Benutzer-ID.
  • $ Caps Array Eine Reihe von Funktionen, gegen die geprüft werden kann.

Wenn die Rolle (oder der Benutzer) die angegebenen Funktionen in hat $ Caps Array gibt die Funktion true zurück. Im anderen Fall gibt die Funktion false zurück. Die Funktion durchläuft im Grunde jede Funktion und prüft, ob die Rolle (oder der Benutzer) die angegebene Fähigkeit hat.

 / ** * Gibt true zurück, wenn eine Rolle über die Fähigkeiten im übergebenen Array verfügt * * @static * @param $ role * @param $ caps * @return bool * / static function role_has_caps ($ role, $ caps) foreach ($ caps als $ cap) if (! $ role-> has_cap ($ cap)) return false;  return true;  / ** * Gibt true zurück, wenn ein Benutzer über die Funktionen im übergebenen Array verfügt * * @static * @param $ user * @param $ caps * @return bool * / statische Funktion user_has_caps ($ user, $ caps) foreach ( $ caps als $ cap) if (! $ user-> has_cap ($ cap)) return false;  return true; 

Berechtigungen hinzufügen

Dies ist der erste Schritt, um das Gesetz unseres Plugins durchzusetzen. Ich habe die Funktionalität auf 3 Funktionen verteilt: Eine zum Festlegen von Berechtigungen für alle Benutzer, eine zum Festlegen von Berechtigungen für die Rollen und eine andere zum Festlegen von Berechtigungen für die angegebenen Benutzer. Die Hauptfunktion entscheidet lediglich, welche Funktionen aufgerufen werden sollen.

 / ** * Setze die Menü- und Seitenzugriffsberechtigungen * / private Funktion set_permissions () $ this-> set_all_permissions (); if (! $ this-> all) $ this-> set_roles_permissions (); $ this-> set_users_permissions (); 

Das set_all_permissions () Funktion durchläuft alle Benutzer des Blogs und fügt (oder entfernt) die "wptuts_client"Fähigkeit abhängig vom Wert des $ alle Variable. Wir erhalten die vollständige Liste der Benutzer, die das verwenden get_users () Funktion; und ein neues initialisieren WP_User Objekt, um Zugriff auf die add_cap () und remove_cap () Funktionen.

 / ** * Festlegen der Berechtigungen für ALLE Benutzer * / private Funktion set_all_permissions () $ users = get_users (); foreach ($ Benutzer als $ Benutzer) $ Benutzer = neuer WP_User ($ Benutzer-> ID); if ($ this-> all) $ user-> add_cap ('wptuts_client');  else $ user-> remove_cap ('wptuts_client'); 

Das set_roles_permissions () Funktion durchläuft alle Rollen im Blog und entfernt das "wptuts_client"Fähigkeit. Danach durchläuft es Rollen im $ rollen Array und fügt die "wptuts_client"Fähigkeit. Der erste Schritt bestand darin, sicherzustellen, dass wir die Funktion von Rollen entfernen, die zuvor möglicherweise vorhanden waren.

 / ** * Legt die Berechtigungen für Rollen fest * / private Funktion set_roles_permissions () global $ wp_roles; $ rolls = $ wp_roles-> get_names (); foreach ($ rollen als $ role_id => $ Rollenname) $ role = get_role ($ role_id); $ role-> remove_cap ('wptuts_client');  if (! empty ($ this-> rollen)) foreach ($ this-> rollen als $ role_id) $ role = get_role ($ role_id); $ role-> add_cap ('wptuts_client'); 

Das set_users_permissions () Funktion macht das gleiche wie die letzte Funktion. Der einzige Unterschied besteht darin, dass Benutzer anstelle von Rollen angesprochen werden.

 / ** * Festlegen der Berechtigungen für bestimmte Benutzer * / private Funktion set_users_permissions () $ users = get_users (); foreach ($ Benutzer als $ Benutzer) $ Benutzer = neuer WP_User ($ Benutzer-> ID); $ user-> remove_cap ('wptuts_client');  if (! empty ($ this-> users)) foreach ($ this-> users als $ user_id) $ user = neuer WP_User ($ user_id); $ user-> add_cap ('wptuts_client'); 

Medienbibliotheksfilter

Jetzt haben wir die richtigen Berechtigungen für die richtigen Entitäten festgelegt. (Benutzer oder Rolle) Wir müssen auch den Zugriff auf die Medienbibliothek für die vierte Kategorie einschränken, die wir im Szenario unterschieden.

Diese Kategorie von Rollen (oder Benutzern) hat die "wptuts_client"Fähigkeit, aber nicht die"Daten hochladen"Fähigkeit. Und hier kommen unsere Filterfunktionen ins Spiel. Sie helfen uns, diese Kategorie von Rollen (oder Benutzern) zu filtern und zurückzugeben..

Für diese Kategorie fügen wir zwei Funktionen hinzu. "Daten hochladen" und "remove_upload_files". Das "Daten hochladen"gibt vollen Zugriff auf die Medienbibliothek; die andere Funktion wird zum Filtern der Medienbibliothekseinträge verwendet, und sie wird auch zum Entfernen der" verwendet.Daten hochladen"Fähigkeit einmal die"wptuts_client"Fähigkeit wird auch entfernt.

 / ** * Medienzugriff einschränken * / private function media_filter () // Wende den Medienfilter für die aktuellen Clients an $ rolls = self :: filter_roles (array ('wptuts_client'), array ('upload_files')); $ users = self :: filter_users (array ('wptuts_client'), array ('upload_files')); $ this-> rolls_add_cap ($ rolls, 'upload_files'); $ this-> rolls_add_cap ($ rolls, 'remove_upload_files'); $ this-> users_add_cap ($ users, 'upload_files'); $ this-> users_add_cap ($ users, 'remove_upload_files'); // Zugriff auf Medienbibliothek einschränken add_filter ('parse_query', array (& $ this, 'restore_media_library')); // Zu Reinigungszwecken $ clean_roles = self :: filter_roles (array ('remove_upload_files'), array ('wptuts_client')); $ clean_users = self :: filter_users (array ('remove_upload_files'), array ('wptuts_client')); $ this-> rolls_remove_cap ($ clean_roles, 'upload_files'); $ this-> rolls_remove_cap ($ clean_roles, 'remove_upload_files'); $ this-> users_remove_cap ($ clean_users, 'upload_files'); $ this-> users_remove_cap ($ clean_users, 'remove_upload_files'); 

Nachdem Sie die Fähigkeiten auf diese Kategorie eingestellt haben, haken wir uns an "parse_query"filter. Mit diesem Filter können wir die von WP_Query. In unserem Fall setzen wir die "AutorAbfragevariable. Dies führt dazu, dass nur Beiträge zurückgegeben werden, die vom angegebenen Autor erstellt wurden.

 / ** * Zugriff auf die Medienbibliothek einschränken * * @param $ wp_query * / public function limits_media_library ($ wp_query) if (strpos ($ _ SERVER ['REQUEST_URI']) '/wp-admin/upload.php)) if (current_user_can ('remove_upload_files')) global $ current_user; $ wp_query-> set ('author', $ current_user-> ID);  else if (strpos ($ _ SERVER ['REQUEST_URI'], '/wp-admin/media-upload.php')) if (current_user_can ('remove_upload_files')) global $ current_user; $ wp_query-> set ('author', $ current_user-> ID); 

Der vollständige Code

 if (! class_exists ('wpttuts_roles')) class wpttuts_roles / ** * Legt fest, ob alle Benutzer über die erforderlichen Berechtigungen verfügen. * * @var boolean * / private $ all; / ** * Ein Array mit den Rollen mit den erforderlichen Berechtigungen * * @var array * / private $ rollen; / ** * Ein Array mit den Benutzernamen, die über die erforderlichen Berechtigungen verfügen * * @var array * / private $ users; / ** * Erstellt eine neue Instanz der Rollenklasse * * @param boolean $ all * @param array $ rollen * @param array $ users * / function __construct ($ all = false, $ rolls = array (), $ users) = array ()) // Setze die erlaubten Entitäten $ this-> set_entities ($ all, $ role, $ users); // Benutzerzugriffsberechtigung setzen $ this-> set_permissions (); // Medienbibliotheksfilter $ this-> media_filter ();  / ** * Legen Sie die Berechtigungsentitäten fest * * @param boolean $ all * @param array $ Rollen * @param array $ Benutzer * / private Funktion set_entities ($ all, $ Rollen, $ Benutzer) $ this-> all = $ all; $ this-> rollen = $ rollen; $ this-> users = $ users;  / ** * Legen Sie die Menü- und Seitenzugriffsberechtigungen fest * / private Funktion set_permissions () $ this-> set_all_permissions (); if (! $ this-> all) $ this-> set_roles_permissions (); $ this-> set_users_permissions ();  / ** * Legt die Berechtigungen für ALLE Benutzer fest * / private Funktion set_all_permissions () $ users = get_users (); foreach ($ Benutzer als $ Benutzer) $ Benutzer = neuer WP_User ($ Benutzer-> ID); if ($ this-> all) $ user-> add_cap ('wptuts_client');  else $ user-> remove_cap ('wptuts_client');  / ** * Legen Sie die Berechtigungen für Rollen fest * / private Funktion set_roles_permissions () global $ wp_roles; $ rolls = $ wp_roles-> get_names (); foreach ($ rollen als $ role_id => $ Rollenname) $ role = get_role ($ role_id); $ role-> remove_cap ('wptuts_client');  if (! empty ($ this-> rollen)) foreach ($ this-> rollen als $ role_id) $ role = get_role ($ role_id); $ role-> add_cap ('wptuts_client');  / ** * Festlegen der Berechtigungen für bestimmte Benutzer * / private Funktion set_users_permissions () $ users = get_users (); foreach ($ Benutzer als $ Benutzer) $ Benutzer = neuer WP_User ($ Benutzer-> ID); $ user-> remove_cap ('wptuts_client');  if (! empty ($ this-> users)) foreach ($ this-> users als $ user_id) $ user = neuer WP_User ($ user_id); $ user-> add_cap ('wptuts_client');  / ** * Medienzugriff einschränken * / private function media_filter () // Anwenden des Medienfilters für aktuelle AdPress-Clients $ rolls = self :: filter_roles (array ('wptuts_client'), array ('upload_files')) ; $ users = self :: filter_users (array ('wptuts_client'), array ('upload_files')); $ this-> rolls_add_cap ($ rolls, 'upload_files'); $ this-> rolls_add_cap ($ rolls, 'remove_upload_files'); $ this-> users_add_cap ($ users, 'upload_files'); $ this-> users_add_cap ($ users, 'remove_upload_files'); // Zugriff auf Medienbibliothek einschränken add_filter ('parse_query', array (& $ this, 'restore_media_library')); // Zu Reinigungszwecken $ clean_roles = self :: filter_roles (array ('remove_upload_files'), array ('wptuts_client')); $ clean_users = self :: filter_users (array ('remove_upload_files'), array ('wptuts_client')); $ this-> rolls_remove_cap ($ clean_roles, 'upload_files'); $ this-> rolls_remove_cap ($ clean_roles, 'remove_upload_files'); $ this-> users_remove_cap ($ clean_users, 'upload_files'); $ this-> users_remove_cap ($ clean_users, 'remove_upload_files');  / ** * Hinzufügen einer Funktion zu einem Array von Rollen * * @param $ Rollen * @param $ cap * / private Funktion role_add_cap ($ rollen, $ cap) foreach ($ rollen als $ rolle) $ role = get_role ($ -Rolle); $ role-> add_cap ($ cap);  / ** * Fügt einem Array von Benutzern eine Funktion hinzu. * * @Param $ users * @param $ cap * / private Funktion users_add_cap ($ users, $ cap) foreach ($ users as $ user) $ user = neuer WP_User ($ user); $ user-> add_cap ($ cap);  / ** * Entfernen einer Funktion aus einem Array von Rollen * * @param $ Rollen * @param $ cap * / private Funktion role_remove_cap ($ rollen, $ cap) foreach ($ rollen als $ rolle) $ role = get_role ($ role); $ role-> remove_cap ($ cap);  / ** * Entfernen einer Funktion aus einem Array von Benutzern * * @param $ users * @param $ cap * / private Funktion users_remove_cap ($ users, $ cap) foreach ($ users as $ user) $ user = neuer WP_User ($ user); $ user-> remove_cap ($ cap);  / ** * Alle Rollen des Blogs nach Funktionen filtern * * @static * @param array $ include Array von Funktionen, die * @param array $ enthalten sollen. Excl. Array von Funktionen, um * @return array * / statische Funktionsfiltersteuerungen auszuschließen ($ include, $ exclude) $ gefilterte_Regel = array (); globale $ wp_roles; $ rolls = $ wp_roles-> get_names (); foreach ($ rollen als $ role_id => $ Rollenname) $ role = get_role ($ role_id); if (self :: role_has_caps ($ role, $ include) &&! self :: role_has_caps ($ role, $ exclude)) $ gefilterte_Rollen [] = $ role_id;  return $ gefilterte_Rollen;  / ** * Gibt true zurück, wenn eine Rolle über die Funktionen im übergebenen Array verfügt * * @static * @param $ role * @param $ caps * @return bool * / static function role_has_caps ($ role, $ caps) foreach ( $ caps als $ cap) if (! $ role-> has_cap ($ cap)) return false;  return true;  / ** * Alle Benutzer des Blogs nach Funktionen filtern * * @static * @param array $ include Array von Funktionen, die * @param array $ enthalten sollen. Exclude Array von Funktionen, um * @return array * / statische Funktion filter_users ( $ include, $ exclude) $ gefilterte Benutzer = array (); $ users = get_users (); foreach ($ Benutzer als $ Benutzer) $ Benutzer = neuer WP_User ($ Benutzer-> ID); if (self :: user_has_caps ($ user, $ include) &&! self :: user_has_caps ($ user, $ exclude)) $ gefilterte Benutzer [] = $ user-> ID;  return $ gefilterte Benutzer;  / ** * Gibt true zurück, wenn ein Benutzer über die Funktionen im übergebenen Array verfügt * * @static * @param $ user * @param $ caps * @return bool * / statische Funktion user_has_caps ($ user, $ caps) foreach ( $ caps als $ cap) if (! $ user-> has_cap ($ cap)) return false;  return true;  / ** * Beschränken Sie den Zugriff auf die Medienbibliothek * * @param $ wp_query * / public function restore_media_library ($ wp_query) if (strpos ($ _ SERVER ['REQUEST_URI']) '/wp-admin/upload.php')) if (current_user_can ('remove_upload_files')) global $ current_user; $ wp_query-> set ('author', $ current_user-> ID);  else if (strpos ($ _ SERVER ['REQUEST_URI'], '/wp-admin/media-upload.php')) if (current_user_can ('remove_upload_files')) global $ current_user; $ wp_query-> set ('author', $ current_user-> ID); 

Fazit

In diesem Lernprogramm habe ich versucht, das Material, das wir aus den beiden letzten Beiträgen gelernt haben, zu verwenden, um eine benutzerdefinierte Lösung für Rollen und Fähigkeiten zu erstellen. Die Lösung wurde in einer Klasse zusammengefasst, die an Ihre eigenen Bedürfnisse oder Plugins angepasst werden kann. Sie finden den Code auf Github.

Wenn Sie Fragen, Anregungen oder Verbesserungen haben, können Sie es gerne in den Kommentaren posten.