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

36

Cuando se escriben complementos de WordPress, a menudo es necesario configurar opciones para las funciones en el sitio que tienen acceso a cierta funcionalidad o contenido. Para hacer esto, un desarrollador de complementos necesita obtener 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?

    
pregunta jerclarke 11.09.2010 - 21:38

4 respuestas

43

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" se debe a que ofrece a otros complementos la posibilidad de filtrar la lista en caso de que alguien que no sea administrador tenga el privilegio 'edit_users' (y, por lo tanto, es necesario eliminar 'admin' de 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) .

Es de suponer que su complemento solo ofrecerá la página de configuración en cuestión a alguien que tenga capacidades de nivel de administrador como 'manage_options' y es básicamente un administrador con acceso a todos los roles, por lo que el filtro no debería afectarle.

También hay wp_dropdown_roles() que le da los roles como <option> campos para una lista <select> (aunque es probable que las casillas funcionen mejor en muchos escenarios en los que está eligiendo quién tiene acceso a algo) .

    
respondido por el jerclarke 11.09.2010 - 21:41
11

Prueba esto:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

PS jeje, me perdí esa explicación y mi respuesta, demasiado rápido :)

    
respondido por el Rarst 11.09.2010 - 21:47
0

Aquí es cómo puede encontrar la lista de roles sin ningún complemento o función enlace

    
respondido por el Manuel Costales 26.01.2016 - 21:47
0

Para aquellos que tienen sitio multilingüe, 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 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ľ
        )
)
    
respondido por el Jasom Dotnet 25.05.2016 - 12:58

Lea otras preguntas en las etiquetas