¿Cómo obtener una lista de roles disponibles actualmente en un sitio WordPress?

11 sept 2010, 22:38:22
Vistas: 58.4K
Votos: 50

Al desarrollar plugins para WordPress, a menudo surge la necesidad de configurar opciones para determinar qué roles del sitio tienen acceso a ciertas funcionalidades o contenido. Para hacer esto, un desarrollador de plugins necesita obtener la lista de roles que existen en el sitio para usarlos en las opciones. Debido a que se pueden crear roles personalizados, no podemos asumir que los roles predeterminados son los únicos disponibles.

¿Cuál es la mejor manera de obtener esta lista?

2
Comentarios

Nota: Esta pregunta fue originalmente hecha por Ryan Bilesky en la lista de correo wp-hackers y respondida por mí. La agregué aquí porque es un claro caso de pregunta sobre mejores prácticas que la gente podría buscar en Google :)

jerclarke jerclarke
11 sept 2010 22:42:34

Hola @Jeremy Clarke - Realmente me alegra tener tu participación aquí y esto es exactamente el tipo de cosas que buscamos; respuestas relacionadas con preguntas comunes que también pueden revelar mejores prácticas. ¡Felicidades!

MikeSchinkel MikeSchinkel
12 sept 2010 02:07:02
Todas las respuestas a la pregunta 6
3
63

Los roles se almacenan en la variable global $wp_roles.

La función ideal es get_editable_roles() de /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" es porque ofrece a otros plugins la oportunidad de filtrar la lista en caso de que alguien que no sea un administrador tenga el privilegio 'edit_users' (y por lo tanto 'admin' debe eliminarse de la lista, de lo contrario ese usuario podría hacerse administrador). Los plugins de gestión de roles que se utilizan para crear roles personalizados son los que usarían ese filtro. Por lo demás, esta función es esencialmente get_roles() (que no existe).

Presumiblemente, tu plugin solo ofrecerá la página de configuración en cuestión a alguien que tenga capacidades de nivel de administrador como 'manage_options' y que básicamente sea un administrador con acceso a todos los roles, por lo que el filtro no debería afectarte.

También existe wp_dropdown_roles() que te proporciona los roles como campos <option> para una lista <select> (aunque los checkboxes probablemente funcionen mejor en muchos escenarios donde estás eligiendo quién tiene acceso a algo).

11 sept 2010 22:41:25
Comentarios

Nota: Creé esta función como parte de un parche para hacer WP más seguro, así que estoy parcializado a su favor ;)

jerclarke jerclarke
11 sept 2010 23:06:30

No estoy seguro si esta es la mejor solución a la pregunta, ya que según la documentación, get_editable_roles() recupera una lista filtrada de roles de usuario que el usuario actual tiene permiso para editar. Tal vez wp_roles() sería una mejor opción. Por favor, revisa mi respuesta.

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

Las respuestas de Pablo o Rarst son las correctas. Esta respuesta solo mostrará todos los usuarios si tienes acceso para editar todos los roles de usuario.

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

Prueba esto:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

PD jeje, me salté esa explicación y respuesta, demasiado rápido yo :)

11 sept 2010 22:47:14
0

Para aquellos que tienen un sitio multilingüe, la función

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

devuelve un array localizado como este (los nombres de los roles están en idioma eslovaco):

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 may 2016 13:58:05
0

Así es como puedes obtener un array con todos los roles de usuario existentes y las capacidades para cada rol en WordPress. Si no deseas imprimirlo en pantalla, omite la última línea. La variable $roles en la línea 2 contendrá el array de usuarios y capacidades para que puedas usarlo como necesites. A continuación se muestra un ejemplo del array devuelto.

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

// imprimirlo en pantalla
echo '<pre>' . print_r( $roles, true ) . '</pre>';
9 sept 2019 17:30:58
0

No estoy seguro de que la respuesta aceptada sea la mejor solución a la pregunta, ya que según la documentación, get_editable_roles() recupera una lista filtrada de roles de usuario que el usuario actual tiene permiso para editar.

Tal vez solo necesitemos usar wp_roles(). Esta función recupera la instancia global de WP_Roles y la instancia si es necesario. Y si solo quieres un array con los IDs de los roles como claves y los nombres como valores, puedes hacer esto:

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

Aquí está cómo puedes encontrar la lista de roles sin necesidad de plugins o funciones http://screencast.com/t/uaWsGLAR3Sh

26 ene 2016 22:47:50
Comentarios

Aunque este enlace pueda responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Las respuestas que solo contienen enlaces pueden volverse inválidas si la página enlazada cambia.

Gabriel Gabriel
26 ene 2016 23:19:18