Uzyskiwanie listy obecnie dostępnych ról w witrynie WordPress?

38

Podczas pisania wtyczek WordPress często trzeba skonfigurować opcje, dla których role w witrynie mają dostęp do określonych funkcji lub treści. Aby to zrobić, twórca wtyczki musi pobrać listę ról istniejących w witrynie, aby użyć jej w opcji. Ponieważ można tworzyć niestandardowe role, nie możemy założyć, że domyślne role są jedynymi dostępnymi.

Jaki jest najlepszy sposób na pobranie listy?

jerclarke
źródło
6
Uwaga: To pytanie zostało pierwotnie zadane przez Ryana Bilesky'ego na liście mailowej wp-hackers i udzieliłem na nie odpowiedzi. Dodałem go tutaj, ponieważ jest to wyraźny przypadek pytania o najlepsze praktyki, które ludzie mogą zadawać w Google :)
jerclarke
1
Hej @Jeremy Clarke - Naprawdę cieszę się, że masz tu swój udział, a tego właśnie szukamy; odpowiedzi związane z często zadawanymi pytaniami, które mogą również ujawnić najlepsze praktyki. Sława!
MikeSchinkel,

Odpowiedzi:

47

Role są przechowywane w zmiennej globalnej $wp_roles.

Idealna funkcja pochodziget_editable_roles() z/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;
}

Część „edytowalna” polega na tym, że oferuje innym wtyczkom możliwość filtrowania listy na wypadek, gdyby ktoś inny niż administrator miał 'edit_users'uprawnienia (a zatem „admin” musi zostać usunięty z listy, w przeciwnym razie użytkownik może zostać administratorem). Wtyczki do zarządzania rolami używane do tworzenia niestandardowych ról to te, które korzystałyby z tego filtra. W przeciwnym razie ta funkcja jest zasadniczo get_roles() (co nie istnieje) .

Przypuszczalnie Twoja wtyczka będzie oferować daną stronę ustawień tylko komuś, kto ma 'manage_options'uprawnienia na poziomie administratora, takie jak i jest w zasadzie administratorem z dostępem do wszystkich ról, więc filtr nie powinien mieć na ciebie wpływu.

Istnieje równieżwp_dropdown_roles() funkcja, która daje role jako <option>pola dla <select>listy (chociaż pola wyboru prawdopodobnie będą działać lepiej w wielu scenariuszach, w których wybierasz, kto ma dostęp do czegoś) .

jerclarke
źródło
3
Uwaga: stworzyłem tę funkcję jako część łatki, aby WP była bezpieczniejsza, więc jestem stronniczy na jej korzyść;)
jerclarke 11.09.10
14

Spróbuj tego:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

PS heh, brakowało mi wyjaśnienia i odpowiedzi, za szybko mnie :)

Rarst
źródło
0

Oto jak znaleźć listę ról bez żadnych wtyczek lub funkcji http://screencast.com/t/uaWsGLAR3Sh

Manuel Costales
źródło
6
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie.
Gabriel
0

Dla tych, którzy mają wielojęzyczną stronę, funkcja

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

zwraca zlokalizowaną tablicę w ten sposób (nazwy ról są w języku słowackim):

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ľ
        )
)
Jasom Dotnet
źródło
0

W ten sposób można uzyskać tablicę wszystkich istniejących ról użytkowników i możliwości każdej roli w WordPress. Jeśli nie chcesz drukować go na ekranie, pomiń ostatni wiersz. Zmienna $ roles w wierszu 2 pomieści tablicę użytkowników i możliwości, dzięki czemu będziesz mógł jej używać w dowolny sposób. Poniżej znajduje się przykład zwróconej tablicy.

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

// print it to the screen
echo '<pre>' . print_r( $roles, true ) . '</pre>';
Nuno Sarmento
źródło