¿Obtener una lista de roles disponibles actualmente en un sitio de WordPress?

38

Al escribir complementos de WordPress, a menudo es necesario configurar opciones para qué roles en el sitio tienen acceso a cierta funcionalidad o contenido. Para hacer esto, un desarrollador de complementos debe buscar la lista de roles que existen en el sitio para usar en la opción. 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 la lista?

jerclarke
fuente
66
Nota: Esta pregunta fue originalmente hecha por Ryan Bilesky en la lista de correo de wp-hackers y respondí por mí. He añadido aquí porque es un claro ejemplo de las mejores prácticas pregunta que la gente podría pedir a Google :)
jerclarke
1
Hola, @Jeremy Clarke : estoy muy contento de tener tu participación aquí y estos son exactamente los tipos de cosas que estamos buscando aquí; respuestas relacionadas con preguntas comunes que también pueden revelar las mejores prácticas. ¡Prestigio!
MikeSchinkel

Respuestas:

47

Los roles se almacenan en la variable global $wp_roles.

La función ideal esget_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" se debe a que ofrece a otros complementos la posibilidad de filtrar la lista en caso de que alguien que no sea administrador tenga 'edit_users'privilegios (y, por lo tanto, 'admin' deba eliminarse de la lista, de lo contrario, ese usuario podría hacerse administrador). Los complementos de administración de roles utilizados para crear roles personalizados son los que usarían ese filtro. De lo contrario, esta función es esencialmente get_roles() (que no existe) .

Presumiblemente, su complemento solo ofrecerá la página de configuración en cuestión a alguien que tenga capacidades de nivel de administrador 'manage_options'y que sea básicamente un administrador con acceso a todas las funciones, por lo que el filtro no debería afectarlo.

También existe elwp_dropdown_roles() que le brinda los roles como <option>campos para una <select>lista (aunque es probable que las casillas de verificación funcionen mejor en muchos escenarios en los que elige quién tiene acceso a algo) .

jerclarke
fuente
3
Nota: Creé esta función como parte de un parche para hacer que WP sea más seguro, por lo que soy parcial a su favor;)
jerclarke
14

Prueba esto:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

PD je, perdí esa explicación y respuesta, demasiado rápido yo :)

Rarst
fuente
0

Aquí es cómo puede encontrar la lista de roles sin complementos o funciones http://screencast.com/t/uaWsGLAR3Sh

Manuel Costales
fuente
66
Si bien este enlace puede responder la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden volverse inválidas si la página vinculada cambia.
Gabriel
0

Para aquellos que tienen un sitio multilingüe, funcionen

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 una matriz localizada como esta (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ľ
        )
)
Jasom Dotnet
fuente
0

Así es como se obtiene una matriz de todos los roles de usuario existentes y las capacidades para cada rol en WordPress. Si no desea imprimirlo en la pantalla, omita la última línea. La variable $ roles en la línea 2 contendrá la variedad de usuarios y capacidades para que pueda usarla como lo necesite. Vea a continuación un ejemplo de la matriz devuelta.

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

// print it to the screen
echo '<pre>' . print_r( $roles, true ) . '</pre>';
Nuno Sarmento
fuente