Come ottenere una lista dei ruoli attualmente disponibili su un sito WordPress?

11 set 2010, 22:38:22
Visualizzazioni: 58.4K
Voti: 50

Durante lo sviluppo di plugin WordPress, spesso è necessario configurare opzioni che determinano quali ruoli nel sito hanno accesso a determinate funzionalità o contenuti. Per fare questo, uno sviluppatore di plugin deve recuperare la lista dei ruoli esistenti sul sito da utilizzare nell'opzione. Poiché è possibile creare ruoli personalizzati, non possiamo assumere che i ruoli predefiniti siano gli unici disponibili.

Qual è il modo migliore per recuperare questa lista?

2
Commenti

Nota: Questa domanda è stata originariamente posta da Ryan Bilesky sulla mailing list wp-hackers e risposta da me. L'ho aggiunta qui perché è un chiaro esempio di domanda sulle best practice che le persone potrebbero cercare su Google :)

jerclarke jerclarke
11 set 2010 22:42:34

Ciao @Jeremy Clarke - Siamo davvero felici di avere la tua partecipazione qui e queste sono esattamente le tipologie di cose che stiamo cercando; risposte relative a domande comuni che possono anche rivelare best practice. Complimenti!

MikeSchinkel MikeSchinkel
12 set 2010 02:07:02
Tutte le risposte alla domanda 6
3
63

I ruoli sono memorizzati nella variabile globale $wp_roles.

La funzione ideale è get_editable_roles() da /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 "editable" è presente perché offre ad altri plugin la possibilità di filtrare la lista nel caso in cui qualcuno diverso dall'amministratore abbia il privilegio 'edit_users' (e quindi 'admin' deve essere rimosso dalla lista, altrimenti quell'utente potrebbe auto-promuoversi ad amministratore). I plugin di gestione dei ruoli che creano 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 amministrativo come 'manage_options' ed è sostanzialmente un amministratore con accesso a tutti i ruoli, quindi il filtro non dovrebbe influenzarti.

Esiste anche wp_dropdown_roles() che restituisce i ruoli come campi <option> per una lista <select> (anche se le checkbox probabilmente funzionano meglio in molti scenari in cui stai scegliendo chi ha accesso a qualcosa).

11 set 2010 22:41:25
Commenti

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

jerclarke jerclarke
11 set 2010 23:06:30

Non sono sicuro che questa sia la soluzione migliore alla domanda, poiché secondo la documentazione, get_editable_roles() recupera un elenco filtrato di ruoli utente che l'utente corrente è autorizzato a modificare. Forse wp_roles() sarebbe una scelta migliore. Per favore, controlla la mia risposta.

Pablo S G Pacheco Pablo S G Pacheco
26 apr 2022 21:46:03

La risposta di Pablo o di Rarst sono quelle corrette. Questa risposta mostrerà tutti gli utenti solo se hai accesso alla modifica di tutti i ruoli utente.

Obed Parlapiano Obed Parlapiano
20 ott 2022 20:20:45
0
20

Prova questo:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

PS eh, ho perso quella spiegazione e risposta, troppo veloce io :)

11 set 2010 22:47:14
0

Per coloro che hanno un sito multilingue, la 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 un array localizzato come questo (i nomi dei ruoli sono in lingua italiana):

Array
(
    [0] => Array
        (
            [role] => administrator
            [name] => Amministratore
        )

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

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

    [3] => Array
        (
            [role] => contributor
            [name] => Collaboratore
        )
)
25 mag 2016 13:58:05
0

Ecco come ottenere un array di tutti i ruoli utente esistenti e delle relative capacità in WordPress. Se non vuoi stamparlo a schermo, puoi omettere l'ultima riga. La variabile $roles alla riga 2 conterrà l'array degli utenti e delle capacità, che potrai utilizzare come preferisci. Di seguito un esempio dell'array restituito.

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

// stampa a schermo
echo '<pre>' . print_r( $roles, true ) . '</pre>';
9 set 2019 17:30:58
0

Non sono sicuro che la risposta accettata sia la soluzione migliore alla domanda, poiché secondo la documentazione, get_editable_roles() recupera un elenco filtrato di ruoli utente che l'utente corrente è autorizzato a modificare.

Forse abbiamo solo bisogno di usare wp_roles(). Questa funzione recupera l'istanza globale WP_Roles e la istanzia se necessario. E se vuoi semplicemente un array con gli ID dei ruoli come chiavi e i nomi come valori puoi fare così:

$roles = wp_roles()->get_names();
26 apr 2022 21:39:18
1

Ecco come puoi trovare la lista dei ruoli senza alcun plugin o funzione http://screencast.com/t/uaWsGLAR3Sh

26 gen 2016 22:47:50
Commenti

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

Gabriel Gabriel
26 gen 2016 23:19:18