Limitare il tipo di post personalizzato al solo ruolo di amministratore del sito


17

Come posso rimuovere questo tipo di post personalizzato dalla visualizzazione nella dashboard per utenti non amministratori?

/* 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'); 
}

Risposte:


13

register_post_type()accetta un parametro capabilitiesnei suoi argomenti. Vedi get_post_type_capabilities()per possibili valori. Dai commenti:

Per impostazione predefinita, sette chiavi sono accettate come parte dell'array di funzionalità:

  • edit_post, read_poste delete_postsono meta-capacità, che vengono quindi generalmente mappate alle corrispondenti capacità primitive a seconda del contesto, che sarebbe il post in fase di modifica / lettura / eliminazione e l'utente o il ruolo da controllare. Pertanto, tali funzionalità non verrebbero generalmente concesse direttamente a utenti o ruoli.

  • edit_posts - Controlla se è possibile modificare oggetti di questo tipo di post.

  • edit_others_posts- Controlla se è possibile modificare oggetti di questo tipo di proprietà di altri utenti. Se il tipo di post non supporta un autore, questo si comporterà come edit_posts.
  • publish_posts - Controlla la pubblicazione di oggetti di questo tipo di post.
  • read_private_posts - Controlla se è possibile leggere oggetti privati.

Queste quattro funzionalità primitive sono verificate nel nucleo in varie posizioni. Ci sono anche altre sette capacità primitive a cui non si fa riferimento direttamente nel core, tranne in map_meta_cap(), che prende le tre meta capacità sopra menzionate e le traduce in una o più capacità primitive che devono quindi essere verificate rispetto all'utente o al ruolo, a seconda del contesto.

  • read - Controlla se è possibile leggere oggetti di questo tipo di post.
  • delete_posts - Controlla se gli oggetti di questo tipo di post possono essere eliminati.
  • delete_private_posts - Controlla se gli oggetti privati ​​possono essere eliminati.
  • delete_published_posts - Controlla se gli oggetti pubblicati possono essere eliminati.
  • delete_others_posts- Controlla se è possibile eliminare oggetti di proprietà di altri utenti. Se il tipo di post non supporta un autore, questo si comporterà come delete_posts.
  • edit_private_posts - Controlla se gli oggetti privati ​​possono essere modificati.
  • edit_published_posts - Controlla se gli oggetti pubblicati possono essere modificati.

Queste funzionalità aggiuntive sono utilizzate solo in map_meta_cap(). Pertanto, vengono assegnati per impostazione predefinita solo se il tipo di post è registrato con l' 'map_meta_cap'argomento impostato su true(impostazione predefinita è false).

Nei tuoi argomenti di registrazione aggiungi:

'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'
),

Come faresti la stessa cosa ma consentire ad amministratori ed editori di accedere al cpt?
urok93,

@drtanz Fornisce sia una funzionalità personalizzata che un filtro user_has_cap. Vedi questa risposta per un esempio.
fuxia

Potrei farlo nello stesso modo in cui hai suggerito, ma mettere la funzionalità manage_links (condivisa tra amministratori ed editor) anziché update_core?
urok93,

@drtanz Sì, ma vorrei utilizzare una funzionalità personalizzata. Il gestore dei collegamenti verrà rimosso alla fine e quindi non sai cosa succede alle funzionalità assegnate.
fuxia

2
Nota su update_core; Solo gli amministratori delle installazioni su un singolo sito hanno questa capacità. In Multisito, solo il Super Admin ha queste funzionalità.
numediaweb
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.