Für ein Plugin bin auf mich zur Zeit wollte ich gewähren / beschränken Sie den Zugriff auf die Plugin - Einstellungen (dh die nach Admin - Menü Seiten) auf einer pro Rolle Basis.
Deshalb musste ich ein neues Plugin-spezifische hinzufügen capability
zu deruser roles
.
Leider scheint die Antwort von kaiser nicht mehr zu funktionieren, daher habe ich einige Zeit damit verbracht, herauszufinden, wie die oben genannte Funktionalität berücksichtigt werden kann.
Der Stundenplan
Bevor ich meinen Code mit Ihnen teile, geht es um Folgendes im Klartext:
- Fügen Sie bei der Aktivierung des Plugins die neue Funktion
THE_NEW_CAP
zu Rollen mit einer bestimmten integrierten Funktion hinzu BUILT_IN_CAP
(in meinem Fall:) edit_pages
.
- Führen Sie bei jedem Laden der Seite 1. aus (dh fügen Sie die Funktion erneut hinzu). Dies ist nur erforderlich, wenn Sie mögliche neue Rollen berücksichtigen möchten, die nach der Aktivierung des Plugins erstellt wurden. Daher verfügen diese neuen Rollen nicht über die Plug-in-spezifischen Funktionen, selbst wenn sie über die erforderlichen integrierten Funktionen verfügen.
- Nutzen Sie die neue Funktion für alles, was Sie wollen. Wie bereits erläutert, verwende ich es, um den Zugriff auf die Admin-Menüseiten des Plugins zu gewähren / einzuschränken. So wird es im folgenden Codebeispiel gemacht.
- Entfernen Sie bei Deaktivierung des Plugins die Funktion. Natürlich können Sie dies auch tun, wenn das Plugin deinstalliert wird. So oder so, mach es irgendwann.
Der Code
Und hier ist die obige Liste in Code umgewandelt:
»Einrichten
class WPSE35165Plugin {
public function __construct() {
// Register hooks
register_activation_hook(__FILE__, array(__CLASS__, 'activation'));
register_deactivation_hook(__FILE__, array(__CLASS__, 'deactivation'));
// Add actions
add_action('admin_menu', array(__CLASS__, 'admin_menu'));
}
public function activation() {
self::add_cap();
}
// Add the new capability to all roles having a certain built-in capability
private static function add_cap() {
$roles = get_editable_roles();
foreach ($GLOBALS['wp_roles']->role_objects as $key => $role) {
if (isset($roles[$key]) && $role->has_cap('BUILT_IN_CAP')) {
$role->add_cap('THE_NEW_CAP');
}
}
}
" Es benutzen
// Add plugin menu pages to admin menu
public function admin_menu() {
// Remove the following line if you don't care about new roles
// that have been created after plugin activation
self::add_cap();
// Set up the plugin admin menu
add_menu_page('Menu', 'Menu', 'THE_NEW_CAP', …);
add_submenu_page('wpse35165', 'Submenu', 'Submenu', 'THE_NEW_CAP', ...);
}
»Aufräumen
public function deactivation() {
self::remove_cap();
}
// Remove the plugin-specific custom capability
private static function remove_cap() {
$roles = get_editable_roles();
foreach ($GLOBALS['wp_roles']->role_objects as $key => $role) {
if (isset($roles[$key]) && $role->has_cap('THE_NEW_CAP')) {
$role->remove_cap('THE_NEW_CAP');
}
}
}
}
Hinweis: Bitte verwenden Sie keine Großbuchstaben. Dies dient nur der Lesbarkeit.