Restringir o tipo de postagem personalizado apenas para a função de administrador do site

17

Como posso impedir que esse tipo de postagem personalizado seja mostrado no painel para usuários não administradores?

/* Add Websites Custom Post Type */
add_action( 'init', 'create_website_type' );
function create_website_type() {

    register_post_type( 'website',
        array(
            'labels' => array(
                'name' => __( 'Websites' ),
                'singular_name' => __( 'Website' ),
                'add_new' => __( 'Add New Website' ),
                'add_new_item' => __( 'Add New Website' ),
                'edit' => __( 'Edit Website' ),             
                'edit_item' => __( 'Edit Website' ),                
                'new_item' => __( 'Add New Website' ),              
                'view' => __( 'View Website' ),         
                'view_item' => __( 'View Website' ),                    
                'search_items' => __( 'Search Websites' ),  
                'not_found' => __( 'No Websites Found' ),
                'not_found_in_trash' => __( 'No Websites found in Trash' ),                                         
            ),
            'description' => __('Websites to be shown in Resources section.'),
            'public' => true,
            'show_ui' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'menu_position' => 20,
            'supports' => array('title', 'editor'),
            'can_export' => true        
        )
    ); 
    remove_post_type_support('website','editor'); 
}
urok93
fonte

Respostas:

13

register_post_type()aceita um parâmetro capabilitiesem seus argumentos. Veja get_post_type_capabilities()para valores possíveis. Dos comentários:

Por padrão, sete chaves são aceitas como parte da matriz de recursos:

  • edit_post, read_post, E delete_postsão meta capacidades, os quais são, em seguida, geralmente mapeados para recursos de primitivas, dependendo do contexto, o que seria o poste a ser editado / leitura / apagados e o utilizador ou papel ser verificado correspondente. Portanto, esses recursos geralmente não seriam concedidos diretamente aos usuários ou funções.

  • edit_posts - Controla se os objetos desse tipo de postagem podem ser editados.

  • edit_others_posts- Controla se objetos deste tipo de propriedade de outros usuários podem ser editados. Se o tipo de postagem não suportar um autor, ele se comportará como edit_posts.
  • publish_posts - Controla a publicação de objetos desse tipo de postagem.
  • read_private_posts - Controla se objetos particulares podem ser lidos.

Esses quatro recursos primitivos são verificados no núcleo em vários locais. Também existem sete outros recursos primitivos que não são referenciados diretamente no núcleo, exceto no map_meta_cap(), que usa os três meta-recursos mencionados acima e os converte em um ou mais recursos primitivos que devem ser verificados em relação ao usuário ou função, dependendo do contexto.

  • read - Controla se os objetos desse tipo de postagem podem ser lidos.
  • delete_posts - Controla se os objetos desse tipo de postagem podem ser excluídos.
  • delete_private_posts - Controla se objetos particulares podem ser excluídos.
  • delete_published_posts - Controla se os objetos publicados podem ser excluídos.
  • delete_others_posts- Controla se os objetos pertencentes a outros usuários podem ser excluídos. Se o tipo de postagem não suportar um autor, ele se comportará como delete_posts.
  • edit_private_posts - Controla se objetos particulares podem ser editados.
  • edit_published_posts - Controla se os objetos publicados podem ser editados.

Esses recursos adicionais são usados ​​apenas no map_meta_cap(). Portanto, eles são atribuídos apenas por padrão se o tipo de postagem estiver registrado com o 'map_meta_cap'argumento definido como true(o padrão é false).

Nos seus argumentos de registro, adicione:

'capabilities' => array(
    'edit_post'          => 'update_core',
    'read_post'          => 'update_core',
    'delete_post'        => 'update_core',
    'edit_posts'         => 'update_core',
    'edit_others_posts'  => 'update_core',
    'delete_posts'       => 'update_core',
    'publish_posts'      => 'update_core',
    'read_private_posts' => 'update_core'
),
fuxia
fonte
Como você faria a mesma coisa, permitindo que administradores e editores acessassem o cpt?
Urok93
@drtanz Ofereça um recurso personalizado e filtre user_has_cap. Veja esta resposta para um exemplo.
Fuxia
Posso fazer da mesma maneira que você sugeriu, mas colocar o recurso manage_links (compartilhado entre administradores e editores) em vez de update_core?
Urok93
@drtanz Sim, mas eu usaria um recurso personalizado. O gerenciador de links será removido eventualmente e você não sabe o que acontece com os recursos atribuídos.
fuxia
2
Nota sobre o update_core; Somente administradores de instalações de site único têm essa capacidade. No Multisite, apenas o Superadministrador possui essas capacidades.
Numeroweb