Cum obții o listă cu rolurile disponibile într-un site WordPress?

11 sept. 2010, 22:38:22
Vizualizări: 58.4K
Voturi: 50

Când dezvolți plugin-uri WordPress, deseori apare necesitatea de a configura opțiuni pentru rolurile care au acces la anumite funcționalități sau conținut pe site. Pentru aceasta, un dezvoltator de plugin-uri trebuie să obțină lista rolurilor existente pe site pentru a le utiliza în opțiuni. Deoarece pot fi create roluri personalizate, nu putem presupune că rolurile implicite sunt singurele disponibile.

Care este cea mai bună metodă pentru a obține această listă?

2
Comentarii

Notă: Această întrebare a fost inițial pusă de Ryan Bilesky pe lista de discuții wp-hackers și răspunsă de mine. Am adăugat-o aici pentru că este un exemplu clar de întrebare despre cele mai bune practici la care oamenii ar putea căuta pe Google :)

jerclarke jerclarke
11 sept. 2010 22:42:34

Hei @Jeremy Clarke - Sunt foarte bucuros să te avem participând aici și acestea sunt exact genul de lucruri pe care le căutăm aici; răspunsuri legate de întrebări comune care pot dezvălui și cele mai bune practici. Felicitări!

MikeSchinkel MikeSchinkel
12 sept. 2010 02:07:02
Toate răspunsurile la întrebare 6
3
63

Rolurile sunt stocate în variabila globală $wp_roles.

Funcția ideală este get_editable_roles() din /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;
}

Partea "editable" există deoarece oferă altor pluginuri șansa de a filtra lista în cazul în care cineva altul decât administratorul are privilegiul 'edit_users' (și astfel rolul 'admin' trebuie eliminat din listă, altfel acel utilizator s-ar putea face administrator). Pluginurile de gestionare a rolurilor care creează roluri personalizate sunt cele care ar folosi acest filtru. În caz contrar, această funcție este în esență get_roles() (care nu există).

Se presupune că pluginul tău va oferi pagina de setări în discuție doar cuiva care are capabilități de nivel admin precum 'manage_options' și este practic un administrator cu acces la toate rolurile, deci filtrul nu ar trebui să te afecteze.

Există și wp_dropdown_roles() care oferă rolurile ca câmpuri <option> pentru o listă <select> (deși checkbox-urile sunt probabil mai potrivite în multe scenarii în care alegi cine are acces la ceva).

11 sept. 2010 22:41:25
Comentarii

Notă: Am creat această funcție ca parte a unui patch pentru a face WP mai sigur, așa că sunt părtinitor în favoarea ei ;)

jerclarke jerclarke
11 sept. 2010 23:06:30

Nu sunt sigur dacă aceasta este cea mai bună soluție la întrebare, deoarece conform documentației, get_editable_roles() preia o listă filtrată de roluri de utilizator pe care utilizatorul curent are voie să le editeze. Poate că wp_roles() ar fi o alegere mai bună. Te rog, verifică răspunsul meu.

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

Răspunsurile lui Pablo sau Rarst sunt cele corecte. Acest răspuns va afișa toți utilizatorii doar dacă ai acces la editarea tuturor rolurilor de utilizator.

Obed Parlapiano Obed Parlapiano
20 oct. 2022 20:20:45
0
20

Încearcă asta:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

PS heh, am ratat explicația și răspunsul, prea rapid eu :)

11 sept. 2010 22:47:14
0

Pentru cei care au un site multilingv, funcția

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;
}

returnează un array localizat astfel (numele rolurilor sunt în limba slovacă):

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ľ
        )
)
25 mai 2016 13:58:05
0

Iată cum poți obține un array cu toate rolurile de utilizator existente și capabilitățile pentru fiecare rol în WordPress. Dacă nu dorești să afișezi rezultatele pe ecran, poți omite ultima linie. Variabila $roles de pe linia 2 va conține array-ul cu utilizatorii și capabilitățile, astfel încât să le poți folosi după necesități. Mai jos găsești un exemplu al array-ului returnat.

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

// afișează rezultatele pe ecran
echo '<pre>' . print_r( $roles, true ) . '</pre>';
9 sept. 2019 17:30:58
0

Nu sunt sigur dacă răspunsul acceptat este cea mai bună soluție la întrebare, conform documentației, get_editable_roles() recuperează o listă filtrată de roluri de utilizator pe care utilizatorul curent are permisiunea să le editeze.

Poate că trebuie doar să folosim wp_roles(). Această funcție recuperează instanța globală WP_Roles și o instantiază dacă este necesar. Și dacă dorești doar un array cu ID-urile rolurilor ca chei și numele ca valori, poți face asta:

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

Iată cum poți găsi lista de roluri fără a utiliza plugin-uri sau funcții suplimentare http://screencast.com/t/uaWsGLAR3Sh

26 ian. 2016 22:47:50
Comentarii

Deși acest link ar putea răspunde la întrebare, este mai bine să includeți părțile esențiale ale răspunsului aici și să furnizați linkul doar ca referință. Răspunsurile care conțin doar link-uri pot deveni invalide dacă pagina la care trimit se modifică.

Gabriel Gabriel
26 ian. 2016 23:19:18