Per un plug-in su cui sto attualmente lavorando, volevo concedere / limitare l'accesso alle impostazioni del plug-in (ovvero le pagine del menu di amministrazione corrispondenti) in base al ruolo .
Pertanto, ho dovuto aggiungere un nuovo plug-in specifico capability
aluser roles
.
Sfortunatamente, la risposta di Kaiser sembra non funzionare più, quindi ho trascorso un po 'di tempo a cercare di capire come consentire la funzionalità sopra menzionata.
Il programma
Prima di condividere il mio codice con te, ecco di cosa si tratta, in testo semplice:
- All'attivazione del plug-in, aggiungi la nuova funzionalità
THE_NEW_CAP
ai ruoli con una certa funzionalità integrata BUILT_IN_CAP
(nel mio caso:edit_pages
.
- Ad ogni caricamento della pagina, esegui 1. (ovvero, aggiungere di nuovo la funzionalità). Ciò è necessario solo se si desidera tenere conto di possibili nuovi ruoli che sono stati creati dopo l'attivazione del plug-in. Pertanto, questi nuovi ruoli non dispongono della funzionalità specifica del plug-in, anche se dispongono della funzionalità integrata richiesta.
- Usa la nuova funzionalità per quello che vuoi. Come spiegato in precedenza, lo uso per concedere / limitare l'accesso alle pagine del menu di amministrazione del plug-in, in questo modo viene fatto nel seguente esempio di codice.
- Alla disattivazione del plug-in, rimuovere la funzionalità. Naturalmente, potresti farlo anche quando il plugin viene disinstallato. Ad ogni modo, fallo alla fine.
Il codice
Ed ecco la lista sopra convertita in codice:
»Impostazione
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');
}
}
}
" Usandolo
// 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', ...);
}
»Pulizia
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');
}
}
}
}
Nota: non utilizzare le maiuscole. Questo è solo per leggibilità.