it-swarm-es.com

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

Al escribir complementos de WordPress, a menudo es necesario configurar las opciones para las que los roles en el sitio 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?

39
jerclarke

Los roles se almacenan en la variable global $wp_roles.

La función ideal es get_editable_roles()from /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, 'admin' debe eliminarse de la lista, de lo contrario, el usuario se hacen admin). 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 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 te da los roles como <option> campos para una <select> list (aunque es probable que las casillas funcionen mejor en muchos escenarios en los que estás eligiendo quién tiene acceso a algo ).

45
jerclarke

Prueba esto:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

PS je, me perdí esa explicación y contesté, demasiado rápido yo :)

12
Rarst

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ľ
        )
)
0
Jasom Dotnet

Aquí es cómo puede encontrar la lista de roles sin ningún complemento o función http://screencast.com/t/uaWsGLAR3Sh

0
Manuel Costales