Come posso rimuovere il pulsante "Aggiungi nuovo" nel mio custom post type?
Ho molti custom post type che necessitano della funzionalità "Aggiungi [custom post type]", ma ho un custom post type chiamato "About" per il quale non ho bisogno del pulsante "Aggiungi nuovo". Quindi vorrei rimuovere il pulsante in alto che dice "Aggiungi About".
Questo è ciò a cui mi riferisco:
Qualcuno sa come posso rimuoverlo?

Una soluzione più elegante sarebbe disabilitare la possibilità di creare un custom_post_type:
Basta passare il parametro 'create_posts' => 'do_not_allow',
nell'array delle capabilities quando si chiama register_post_type
.
$args = array(
'label' => __( 'Custom Post Type', 'text_domain' ),
'description' => __( 'Custom Post Type', 'text_domain' ),
'labels' => $labels,
'supports' => array( ),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'map_meta_cap' => true,
'capabilities' => array(
'create_posts' => 'do_not_allow'
)
);
register_post_type( 'custom_post_type', $args );

C'è uno svantaggio nel fare così? Sembra una soluzione molto migliore rispetto a nascondere semplicemente i link con il CSS.

Confermo che funziona! Dovrebbe essere la risposta accettata perché non si basa su hack CSS.

Non sembra funzionare su 4.7.2
... Inoltre, non dovrebbe nemmeno accettare un valore boolean
. Dovrebbe essere un valore string
di: do_not_allow
.

non è una soluzione preferibile, a volte non dovresti poter semplicemente creare "post" senza un contesto predefinito. Alcune cose sono solo caramelle UX e l'alternativa di cercare di assegnare capacità basate sul contesto nell'admin è un incubo non gestibile.

C'è un bug correlato di WP #22895 (https://core.trac.wordpress.org/ticket/22895) che causa la mancata visualizzazione della pagina edit.php per il CPT se ci fosse solo la voce di menu "Tutti i post" nel sottomenu admin del CPT. C'è una soluzione alternativa su https://wordpress.stackexchange.com/questions/178033/disable-posts-only-allow-to-edit-existing-pages-not-create-new-ones-create-po.

Per poter selezionare ruolo per ruolo chi può creare post CPT dovresti avere 'capabilities' => array('create_posts' => 'create_custom_post_types')) dove 'custom_post_types' è il nome del tuo CPT con la 's' aggiunta. Oppure il secondo elemento nell'array capability_type se l'hai definito in quel modo.

Si prega di fare riferimento qui sotto:
function disable_new_posts() {
// Nascondi il link nella sidebar
global $submenu;
unset($submenu['edit.php?post_type=CUSTOM_POST_TYPE'][10]);
// Nascondi il link nella pagina di elenco
if (isset($_GET['post_type']) && $_GET['post_type'] == 'CUSTOM_POST_TYPE') {
echo '<style type="text/css">
#favorite-actions, .add-new-h2, .tablenav { display:none; }
</style>';
}
}
add_action('admin_menu', 'disable_new_posts');

Grazie, lo apprezzo molto. Solo un'altra domanda riguardo al codice. Può essere usato per rimuovere altri elementi sulla stessa pagina? Ad esempio la barra "Cerca" sulla destra.

Sì, ma per farlo devi modificare gli elementi necessari nel codice.

Quindi, se vuoi solo rimuovere Aggiungi nuovo e non stai utilizzando custom_post_type
, non dovresti usare 'capability_type' => 'custom_post_type'
. È meglio rimuovere questo codice. Buona fortuna :)
Ecco la demo qui sotto:
array(
'labels' => $member_labels,
'has_archive' => true,
'public' => true,
'hierarchical' => true, // come una pagina
'rewrite' => array('slug' => 'member_pages'),
'supports' => array(
'title',
'editor',
'excerpt',
'custom-fields',
'thumbnail',
'page-attributes',
),
'taxonomies' => array('post_tag', 'cm_club'),
// 'capability_type' => 'custom_post_type',
'capabilities' => array(
'create_posts' => false,
),
'map_meta_cap' => true,
)

Ho modificato la risposta di @TompaLompa poiché era incompleta. Aggiungere create_posts => false
non funzionerà se map_meta_cap
non è impostato su true
.
Non impostare questo parametro (o impostarlo su false
) disabiliterà anche la modifica del tipo di post. Questo perché sarebbe necessario aggiungere la capacità edit_post
a ogni ruolo utente per poter aggiungere E modificare il tuo tipo di post.
Impostando questo parametro verrà utilizzata la gestione predefinita delle capacità meta di WordPress e funzionerà per te se non hai bisogno di un controllo più preciso sulle capacità dei ruoli rispetto a quelle predefinite di WP.

Il modo migliore che ho trovato è installare il plugin add-admin-javascript e attivarlo, poi andare nelle impostazioni e aggiungere il codice JavaScript. Scrivi questo codice nell'ultima casella:
$('.wrap .wp-heading-inline').remove();
$('.wrap .page-title-action').remove();
$('#wp-admin-bar-new-content').remove();
