Permitir que o membro tenha acesso apenas ao tipo de postagem personalizado. Permissão para editar apenas suas próprias postagens


29

OK, estou procurando a melhor maneira de atacar isso.

Estou muito confortável com o PHP e criando tipos de post personalizados com meta campos personalizados no WordPress.

Aqui está o que eu estou olhando para fazer:

  1. O usuário registra e é definido no assinante por padrão.
  2. O usuário solicita ao administrador permissão para o tipo de postagem personalizado.
  3. Admin atribui usuário a outro nome de permissão como "Dono da loja".
  4. Agora o usuário pode ver o tipo de postagem personalizado e pode fazer uma entrada para esse tipo de postagem.
  5. O usuário pode apenas ver e editar sua própria postagem.

Preciso de ajuda para o seguinte:

  1. Como criar uma nova "Função" chamada "Dono da loja",
  2. Como conceder a permissão correta para a referida função ver e ter acesso apenas ao tipo de postagem personalizado.
  3. Permitir apenas que o usuário veja e edite suas próprias postagens nesse tipo de postagem personalizada.

Idealmente, eu preferiria que tudo isso fosse feito pelo wp-admin, mas acho que talvez seja necessário criar um front end para isso para obter o controle finito que estou procurando.

Qualquer entrada é muito apreciada.

Atenciosamente

Respostas:


21

Use o plugin " Membros " de Justin Tadlock . Permite criar novas funções e editar funções existentes, além de adicionar recursos personalizados. Todo esse trabalho que você precisa fazer pode ser reduzido a alguns cliques.

Eu sei que você disse em seu comentário sobre a resposta do ZaMoose que você está 'procurando escrever a funcionalidade para que eu tenha controle total sobre tudo'. Está faltando o ponto principal do software de código aberto. Justin Tadlock lançou seu plugin para que você pudesse usá-lo com precisão para ter controle completo sobre tudo.

Se você realmente realmente quer reinventar a roda, potencialmente desperdiçando centenas de horas de seu próprio tempo, não posso impedi-lo, mas você poderia pelo menos salvar o problema e plug-in uso de Tadlock para aprender a fazer o que quiser.

Depois de ter um plug-in que faça o que você deseja, será necessário alterar o 'map_meta_cap'sinalizador para truee o 'capability_type'sinalizador na sua função de registro de tipo de postagem para que ele diga algo diferente de 'post', 'page' ou qualquer outro 'reservado' tipo. Em seguida, duplicar todas as capacidades relacionadas com mensagens (por exemplo edit_posts, edit_others_posts, publish_posts, etc.), utilizando o seu tipo de capacidade em vez de mensagens. Certifique-se de atribuir todas essas permissões aos administradores (você não poderá ver o tipo de postagem até fazer isso) e, em seguida, crie sua função, imitando as habilidades da função de 'contribuidor' para seu tipo de postagem.

Por exemplo, digamos que o seu tipo de recurso foi foobars, você gostaria de dar 'donos de lojas' as edit_foobars, delete_foobarse readcapacidades. Dessa forma, eles podem criar seus próprios rascunhos e excluir esses rascunhos, mas, como não possuem publish_foobarsrecursos, precisam enviá-los para aprovação. Como eles não têm edit_published_foobars, todas as modificações em um foobar aprovado precisam ser aprovadas.


OK, estou usando o plug-in Membros agora para obter uma ideia de como as permissões de membros funcionam. Eu configurei 'map_meta_cap' => truee 'capability_type' => 'shopowner'no meu tipo de postagem personalizado. Eu criei uma nova função chamada ShopOwnere recebi os recursos de read, edit_shopowner, delete_shopowner. Defina um usuário para a função ShopOwner e faça logon com esse usuário. Esse usuário não pode ver o tipo de postagem personalizado. Perdi alguma coisa?
Brady

2
mude-os para edit_shopownerse delete_shopowners. edit_shopownere delete_shopownersão meta-capacidades que nunca são realmente verificadas. Eles são verificados quando alguém tenta editar ou excluir um item específico e acabam verificando coisas como "Este usuário pode excluir esses tipos de itens? Eles podem excluir apenas os seus próprios ou outros também? Eles podem excluir itens publicados?" etc.
John P Bloch

Eu não conseguia entender nada disso ... mas obtive a funcionalidade que buscava definindo recursos no meu tipo de postagem personalizado e criando esses recursos no plug-in de membros. Concedai a você as respostas, pois sua postagem foi a mais útil para que eu reunisse uma solução. Graças
Brady

19

O tipo de postagem do registro possui um parâmetro chamado "capacidades", para que você possa ter, por exemplo

'capability' => 'organize_shop',

http://codex.wordpress.org/Function_Reference/register_post_type

Para criar um novo usuário / função / recurso, você pode usar add_role, add_cap, para um exemplo simples de introdução:

// Add the role to WordPress list of roles
// Then add the capability 'organize_shop' to the 'shop_owner' role
$role = add_role( 'shop_owner', 'Shop Owner', ['edit_posts' => true]));
$role->add_cap( 'organize_shop' );


// If 'shop_owner' already exists make `$wp_roles` visible then 
// add the capability 'organize_shop' to the 'Show Owner' role
public $wp_roles;
$wp_roles->add_cap( 'shop_owner', 'organize_shop' );

hmm ... Estou um pouco confuso, qual é a diferença entre 2 e 3 linhas? : S Não adiciona o mesmo recurso à função 'Dono da loja'?
Dashaluna # 13/11

Sim, eles são iguais, mas mostram diferentes maneiras de fazê-lo, o primeiro inclui o papel como primeiro parâmetro (Dono da loja), o segundo apenas o limite, pois está usando $ role.
Wyck

3
Você deveria traduzir uma capacidade / permissão? isso é __('');
Svetoslav Marinov

@SvetoslavMarinov Editei a resposta para remover a tradução.
MikeSchinkel 24/02

@dashaluna Eu editei a resposta para esclarecê-la.
MikeSchinkel 24/02

1

Você já pensou em olhar para Gravity Forms ou TDO Mini Forms para lidar com o envio de conteúdo real? Cada um deles possui uma funcionalidade que o levaria a avançar no sentido de lidar com sanidade com o conteúdo enviado pelo usuário.


Obrigado por responder, mas não é isso que estou procurando. Principalmente porque esses são plugins. Eu estou olhando para escrever a funcionalidade para que eu tenha controle total sobre tudo.
Brady

0

Uma maneira mais fácil e eficiente de conseguir isso instalando um plug-in chamado "Advance Access Manager", você não precisará escrever a funcionalidade, mas ainda terá um nível decente de controle sobre os usuários, funções e o que eles podem fazer. A maioria das coisas que você deseja pode ser alcançada por este plugin.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.