Obtendo uma lista de funções atualmente disponíveis em um site WordPress?

38

Ao escrever plugins do WordPress, geralmente é necessário configurar opções para quais funções no site têm acesso a determinadas funcionalidades ou conteúdos. Para fazer isso, um desenvolvedor de plug-in precisa 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?

jerclarke
fonte
6
Nota: Esta pergunta foi originalmente feita por Ryan Bilesky na lista de discussão wp-hackers e respondida por mim. Eu adicionei-lo aqui porque é um caso claro de pergunta mais prática que as pessoas podem perguntar google :)
jerclarke
11
Hey @ Jeremy Clarke - Estou muito feliz por ter sua participação aqui e esses são exatamente os tipos de coisas que estamos procurando aqui; respostas relacionadas a perguntas comuns que também podem revelar as melhores práticas. Parabéns!
MikeSchinkel

Respostas:

47

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

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

A parte "editável" é porque oferece a outros plugins a chance de filtrar a lista caso alguém que não seja administrador tenha 'edit_users'privilégio (e, portanto, 'admin' precisa ser removido da lista, caso contrário o usuário pode se tornar administrador). Os plug-ins de gerenciamento de funções usados ​​para criar funções personalizadas são os que usariam esse filtro. Caso contrário, essa função é essencialmente get_roles() (que não existe) .

Presumivelmente, seu plug-in oferecerá apenas a página de configurações em questão para alguém que possui recursos no nível de administrador, como 'manage_options'e é basicamente um administrador com acesso a todas as funções, portanto o filtro não deve afetá-lo.

Também existe owp_dropdown_roles() que fornece as funções como <option>campos para uma <select>lista (embora as caixas de seleção provavelmente funcionem melhor em muitos cenários em que você escolhe quem tem acesso a algo) .

jerclarke
fonte
3
Nota: Eu criei esta função como parte de um patch para fazer WP mais seguro, por isso estou inclinado a seu favor;)
jerclarke
14

Tente o seguinte:

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 :)

Rarst
fonte
0

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

Manuel Costales
fonte
6
Embora esse link possa responder à pergunta, é melhor incluir aqui as partes essenciais da resposta e fornecer o link para referência. As respostas somente para links podem se tornar inválidas se a página vinculada for alterada.
Gabriel
0

Para aqueles que possuem site multilíngue, 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 uma matriz localizada 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ľ
        )
)
Jasom Dotnet
fonte
0

É assim que se obtém uma matriz de todas as funções de usuário existentes e os recursos de cada função no WordPress. Se você não quiser imprimi-lo na tela, omita a última linha. A variável $ functions na linha 2 manterá a matriz de usuários e recursos para que você possa usá-lo da maneira que precisar. Veja abaixo um exemplo da matriz retornada.

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

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