Como adicionar um recurso a uma função de usuário?

14

Estou gerenciando uma rede do Wordpress e gostaria de adicionar o recurso de usuário unfiltered_html à função de usuário já predefinida de Admin. Em uma instalação padrão do Wordpress, a conta Admin já teria esse recurso, mas em uma instalação de UM, apenas os Superadministradores têm esse recurso. Funções e capacidades do Wordpress .

Como posso aumentar a função de administrador de um tema ou plugin?

Jonnybojangles
fonte
1
wordpress.org/extend/plugins/unfiltered-mu parece que pode ajudar. Mas funciona para administradores e editores. Se isso não for desejado, talvez o código possa ser ajustado um pouco?
Rev. Voodoo
@Rev. Vodu Obrigado pela sugestão. Isso ajudou a lançar alguma luz sobre o assunto como adicionando a capacidade de unfiltered_html não é suficiente para permitir um papel diferente de Admin ou Super administrador a capacidade de embeds pós, etc. A chave era filtragem un / enganchando KSES Wordpress': kses_remove_filters ()
Jonnybojangles
Um detalhe blog: goo.gl/xNuafH
Suresh Kamrushi

Respostas:

14

Você pode usar a classe WP_Role ,

// get the the role object
$role_object = get_role( $role_name );

// add $cap capability to this role object
$role_object->add_cap( $capability_name );

// remove $cap capability from this role object
$role_object->remove_cap( $capability_name );

Portanto, para responder à sua pergunta original sobre como permitir que os administradores insiram as tags SCRIPT e IFRAME no conteúdo da postagem, procure o recurso 'unfiltered_html', que no Multisite é concedido apenas aos superadministradores.

// get the the role object
$admin_role = get_role( 'administrator' );
// grant the unfiltered_html capability
$admin_role->add_cap( 'unfiltered_html', true );

ou você pode executar isso uma vez em suas funções:

/* Roles & Capabilities */
add_role('professional', 'Professional User', array(
    'read' => true, // True allows that capability, False specifically removes it.
    'edit_posts' => true,
    'delete_posts' => true,
    //'edit_published_posts' => true,
    //'publish_posts' => true,
    //'edit_files' => true,
    'upload_files' => true //last in array needs no comma!
));
Philip
fonte
Obrigado Philip. Em relação à classe WP_Role, quando deve executar o código? Eu estou supondo que isso afeta o objeto de função global? Fico feliz que você tenha aberto o segundo bloco de código mencionando que eu poderia executar isso uma vez no meu arquivo de funções. Encontrei soluções semelhantes em alguns fóruns de suporte do Wordpress, mas acho estranho ter executado uma vez o código em um tema ou plugin. Especialmente sem verificar se a alteração já existe. Talvez a gravação da função seja realmente insignificante. Para verificar a capacidade, basta escrever a capacidade na função, como mostra seu primeiro exemplo.
Jonnybojangles
Também estou interessado em saber como você executaria a classe WP_Role se tiver um momento livre para nos contar. Obrigado
Osu
1
@Jonnybojagles & @Osu, verifique isso: Guia Definitivo de Papéis e Capacidades garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities
Philip
Eu já li esse artigo em minha busca, mas aproveitei a oportunidade para ler tudo novamente, obrigado! Eventualmente, depois de dissecar o plug-in não filtrado (mencionado acima pelo Rev. Voodoo), eu finalmente descobri que mudar de função adicionando recursos não é suficiente. Eu precisava filtrar os filtros KSES do Wordpress.
precisa saber é o seguinte
Prefiro adicionar uma vírgula ao último elemento das matrizes. Embora possa parecer irrelevante, pois não é necessário fazer o código funcionar nem resultar em erro (s), é útil ao usar um controle de versão ao visualizar modificações; você não veria uma linha antiga de item da matriz excluída, adicionada novamente e destacada como nova com apenas uma vírgula como adição ou alteração feita para essa linha. Embora pouco, ele ajuda a economizar muito tempo ao analisar modificações.
Nyedidikeke
2

Para permitir que outra função que não seja Superadministrador ou Administrador (dependendo se a instalação do Wordpress é uma instância de rede / MU ou não) adicione html não filtrado a uma postagem ou comentário, o filtro KSES do Wordpress deve ser removido.

Verifique se um usuário tem uma capacidade específica.

if ( current_user_can( 'unfiltered_html' ) ) {  }

Nesse caso, remova o KSES

kses_remove_filters();

Essa funcionalidade já está incluída no mu não filtrado, permitindo que administradores e editores adicionem html não filtrado.

Jonnybojangles
fonte
A funcionalidade também é agrupada em um registro e um cancelamento de registro de plug-in, para que a lógica não precise ser pré-formada em cada instância do WP.
Jonnybojangles