Ottenere un elenco di ruoli attualmente disponibili su un sito WordPress?


38

Quando si scrivono plugin di WordPress, è spesso necessario impostare opzioni per le quali i ruoli sul sito hanno accesso a determinate funzionalità o contenuti. Per fare ciò, uno sviluppatore di plugin deve recuperare l'elenco dei ruoli esistenti sul sito da utilizzare nell'opzione. Poiché è possibile creare ruoli personalizzati, non possiamo presumere che i ruoli predefiniti siano gli unici disponibili.

Qual è il modo migliore per recuperare l'elenco?


6
Nota: questa domanda è stata originariamente posta da Ryan Bilesky nella mailing list di wp-hackers e ha risposto da me. L'ho aggiunto qui perché è un chiaro caso di domanda sulle migliori pratiche che le persone potrebbero porre a Google :)
jerclarke,

1
Hey @Jeremy Clarke - Sono davvero felice di avere la tua partecipazione qui e questi sono esattamente i tipi di cose che stiamo cercando qui; risposte relative a domande comuni che possono anche rivelare le migliori pratiche. Complimenti!
MikeSchinkel,

Risposte:


47

I ruoli sono archiviati nella variabile globale $wp_roles.

La funzione ideale èget_editable_roles() di/wp-admin/includes/user.php

function get_editable_roles() {
    global $wp_roles;

    $all_roles = $wp_roles->roles;
    $editable_roles = apply_filters('editable_roles', $all_roles);

    return $editable_roles;
}

La parte "modificabile" è perché offre ad altri plugin la possibilità di filtrare l'elenco nel caso in cui qualcuno diverso dall'amministratore abbia il 'edit_users'privilegio (e quindi 'admin' deve essere rimosso dall'elenco, altrimenti l'utente potrebbe farsi amministratore). I plug-in di gestione dei ruoli utilizzati per creare ruoli personalizzati sono quelli che utilizzerebbero quel filtro. Altrimenti questa funzione è essenzialmente get_roles() (che non esiste) .

Presumibilmente il tuo plugin offrirà la pagina delle impostazioni in questione solo a qualcuno che ha capacità a livello di amministratore come 'manage_options'ed è fondamentalmente un amministratore con accesso a tutti i ruoli, quindi il filtro non dovrebbe interessarti.

C'è anche quellowp_dropdown_roles() che ti dà i ruoli come <option>campi per un <select>elenco (anche se è probabile che le caselle di controllo funzionino meglio in molti scenari in cui stai scegliendo chi ha accesso a qualcosa) .


3
Nota: ho creato questa funzione come parte di una patch per rendere WP più sicuro, quindi sono di parte a suo favore;)
jerclarke,

14

Prova questo:

function get_role_names() {

global $wp_roles;

if ( ! isset( $wp_roles ) )
    $wp_roles = new WP_Roles();

return $wp_roles->get_names();
}

PS heh, ho perso quella spiegazione e risposta, troppo veloce me :)


0

Ecco come puoi trovare l'elenco dei ruoli senza plugin o funzione http://screencast.com/t/uaWsGLAR3Sh


6
Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia.
Gabriel,

0

Per coloro che hanno un sito multilingue, funzione

function wp_roles_array() {
    $editable_roles = get_editable_roles();
    foreach ($editable_roles as $role => $details) {
        $sub['role'] = esc_attr($role);
        $sub['name'] = translate_user_role($details['name']);
        $roles[] = $sub;
    }
    return $roles;
}

restituisce array localizzati in questo modo (i nomi dei ruoli sono in lingua slovacca):

Array
(
    [0] => Array
        (
            [role] => administrator
            [name] => Administrátor
        )

    [1] => Array
        (
            [role] => editor
            [name] => Editor
        )

    [2] => Array
        (
            [role] => author
            [name] => Autor
        )

    [3] => Array
        (
            [role] => contributor
            [name] => Prispievateľ
        )
)

0

Ecco come ottenere una matrice di tutti i ruoli utente esistenti e le funzionalità per ciascun ruolo, in WordPress. Se non si desidera stamparlo sullo schermo, omettere l'ultima riga. La variabile $ ruoli alla riga 2 conterrà la matrice di utenti e funzionalità in modo che tu possa usarla come è necessario. Vedi sotto per un esempio dell'array restituito.

global $wp_roles;
$roles = $wp_roles->roles; 

// print it to the screen
echo '<pre>' . print_r( $roles, true ) . '</pre>';
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.