it-swarm-pt.tech

Obtendo uma lista de papéis atualmente disponíveis em um site WordPress?

Ao escrever plug-ins do WordPress, geralmente é necessário configurar opções para as funções do site que têm acesso a determinadas funcionalidades ou conteúdos. Para fazer isso, um plugin deve buscar a lista de funções que existem no site para usar na opção. Como as funções personalizadas podem ser criadas, não podemos assumir que as funções padrão sejam as únicas disponíveis.

Qual é a melhor maneira de buscar a lista?

39
jerclarke

As funções são armazenadas na variável global $wp_roles.

A função ideal é 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;
}

A parte "editable" é porque ela oferece a outros plugins uma chance de filtrar a lista no caso de alguém diferente de admin ter o privilégio 'edit_users' (e, portanto, 'admin' precisa ser removido da lista, senão esse usuário pode se tornar admin). Os plugins de gerenciamento de função usados ​​para criar funções personalizadas são os que usariam esse filtro. Caso contrário, esta função é essencialmente get_roles()(que não existe).

Presumivelmente, o seu plug-in só oferecerá a página de configurações em questão para alguém que tenha recursos de nível de administrador, como 'manage_options' e seja basicamente um administrador com acesso a todas as funções, para que o filtro não afete você.

Há também wp_dropdown_roles()que lhe dá as funções de <option> campos para uma lista <select>(embora as caixas de seleção provavelmente funcionem melhor em muitos cenários onde você está escolhendo quem tem acesso a algo).

45
jerclarke

Tente isto:

function get_role_names() {

global $wp_roles;

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

return $wp_roles->get_names();
}

PS heh, perdeu essa explicação e resposta, muito rápido me :)

12
Rarst

Para aqueles que têm site multilíngüe, função

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

retorna um array localizado assim (os nomes das funções estão no 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

Veja como você pode encontrar a lista de funções sem nenhum plug-in ou função http://screencast.com/t/uaWsGLAR3Sh

0
Manuel Costales