23 set

Custom Post Types: criação, uso e dicas – Parte 2

Categoria: - Comentários (7)

Dando continuidade à série de artigos sobre Custom Post Types, neste artigo nós vamos falar sobre como configurar capacidades de usuário personalizadas para o seu novo post type.

Definindo capacidades aos usuários

No artigo anterior, nós vimos como criar o nosso novo post type, agora nós vamos restringir o acesso a ele, criando novas capacidades de usuários. Se determinado usuário tiver tais capacidades, ele verá o post type no painel administrativo, caso contrário, não.

Por padrão, todos os novos tipos de post herdam as mesmas capacidades do tipo de post padrão — post — e geralmente todas as capacidades do nível administrador, por isso quando criamos um post type novo, nós enquanto administradores do sistema, podemos gerenciá-lo. Mas pode acontecer de você querer limitar o acesso a seus post types, somente aos administradores e editores, por exemplo, enquanto que os usuários de nível inferior não poderão ter acesso ao novo tipo de post.

Por padrão, existem sete chaves que são aceitas no array de capacidades do WordPress:

  • edit_post: Capacidade que permite criar e editar um post específico.
  • edit_posts: Capacidade que permite editar posts.
  • edit_others_posts: Capacidade que permite a edição de outros posts.
  • publish_posts: Capacidade que permite publicar posts.
  • read_post: Capacidade que controla a leitura de um post específico.
  • read_private_posts: Capacidade que permite a leitura de posts privados.
  • delete_post: Capacidade que permite apagar posts.

Para trabalharmos com capacidades customizadas no WordPress, nós vamos precisar conhecer mais dois parâmetros: ‘capability_type’ e ‘capabilities’.

  • capability_type é usado, por padrão, como base para construir capacidades e permite que você defina permissões para editar, criar e ler o seu novo tipo de post. É um argumento opcional, sendo que o padrão é ‘post’.
  • capabilities é o array de capacidades do seu novo tipo de post. É um argumento opcional e usa o valor de ‘capability_type’ para construir o array de capacidades.

Podemos usar apenas capability_type para configurarmos nosso array de capacidade.

Note que atribui como valor do argumento ‘capability_type’, um array contendo dois elementos. Um corresponde a forma Singular e o outro, a forma Plural.

Ao definirmos o argumento ‘capability_type’ como ‘produto’ ou ‘produtos’, o WordPress irá mudar automaticamente as capacidades para seguir esse padrão:

  • edit_produto
  • edit_produtos
  • edit_others_produtos
  • publish_produtos
  • read_produto
  • read_private_produtos
  • delete_produto

Nosso código completo está ficando assim:

Ao salvarmos esse código, podemos notar que o item “Produtos” que antes aparecia no menu, já não aparece mais. Isso aconteceu devido ao fato de termos criado capacidades personalizadas que o usuário ‘administrator’ não possui.

Para resolvermos esse problema, nós temos que atribuir ao nosso usuário administrador, todas as novas capacidades que foram criadas:

Utilizamos a função get_role() para obter um objeto da classe WP_Role. Esta classe possui 3 métodos importantes: add_cap, remove_cap e has_cap.

Note que no código usamos o método add_cap para adicionar todas as novas capacidades à função ‘administrator’. Para atribuir as novas capacidades a outro tipo de função, como por exemplo, ‘editor’, basta alterar um pouquinho o código:

Uma advertência muito importante!

Como podemos ver no código acima, ele é ativado através do hook ‘admin_init’, ou seja, toda vez que o painel administrativo for carregado, esta função será executada e irá mexer com o banco de dados, pois as capacidades são armazenadas numa das tabelas do WordPress. Isso é uma péssima idéia!

Nós só precisamos adicionar as novas capacidades uma vez só. Então, para evitar essa execução constante, vamos alterar o hook para ‘after_switch_theme’, assim, a função será carregada somente quando o tema for ativado.

Para fins didáticos, podemos deixar o hook ‘admin_init’ mesmo, só que teremos de excluir ou comentar a linha //add_action(‘admin_init’, ‘produto_add_caps’) depois de executado uma vez. Para quem está desenvolvendo um tema novo, use o hook ‘after_switch_theme’. E se estiver criando um Custom Post Type em um plugin, utilize o hook ‘register_activation_hook’.

O meu código ficou assim:

Dica: Você pode usar o plugin Members para administrar capacidades, criar novas funções, etc. Eu uso e recomendo.

O próximo artigo será o último dessa série. Neste novo artigo eu vou falar sobre outros argumentos interessantes na criação de um Custom Post Type e dar exemplos de uso.

Até lá! :-)

 

Comentários ( 7 )

  • Anderson

    Primeiramente ótimo post! Mas tenho uma dúvida, e não encontro em quanto nenhum. Estou precisando criar um post type, que tenha categorias e tags. E encontrar uma forma de fazer as chamadas filtrando-as.. Se possível gostaria que me ajudasse. Agradeço desde já
    Se sim, me avisa no email, ok?hehe

  • Jonatas Lopes

    Excelente post!

    Criei um custom post type chamado pedido, e o usuário cria os pedidos através de um formulário. Cada vez que ele preenche o formulário gera um novo pedido no painel, então categorizamos com resolvido e não resolvido, porém quando o usuário vai ver o que esta resolvido ele consegue ver os pedidos de todo mundo.

    como faço para restringir a visualização do custom post type apenas para o autor dele?

  • Isaac Borges

    Oi olha achei o site muito legal, foi o único que consegui entender o custom post, mas estou tendo um problema, crie com um plugin advanced custom fields um campo personalizado no painel, mas queria que este só fosse visível ao admin pois tenho outros usuários com status de autor e colaborador, e não queria que estes vissem este campo.

  • Leonardo

    Ensina o looping, por favor !

  • Pedro Oliveira

    Parabéns! Eu estou procurando material sobre CPT faz algum tempo e este eu achei o MELHOR. Totalmente didático, direto e simples. Parabéns.

Envie seu comentário

Resize-me!