Come posso rimuovere il pulsante "Aggiungi nuovo" nel mio custom post type?

22 nov 2014, 11:32:26
Visualizzazioni: 32.1K
Voti: 12

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:

Screenshot del pulsante Aggiungi nuovo nel custom post type About di WordPress

Qualcuno sa come posso rimuoverlo?

0
Tutte le risposte alla domanda 5
7
52

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 );
30 apr 2015 10:53:54
Commenti

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

Nick Young Nick Young
10 giu 2015 06:01:14

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

helgatheviking helgatheviking
3 feb 2016 18:03:11

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

Michael Ecklund Michael Ecklund
27 gen 2017 20:52:59

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.

Mark Kaplun Mark Kaplun
7 lug 2017 10:38:16

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.

jarnoan jarnoan
11 set 2017 10:17:55

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.

jarnoan jarnoan
11 set 2017 10:22:53

questo funziona nella versione 4.9.4 sostituendo 'create_posts' => false con 'create_posts' => 'do_not_allow'. E 'capability_type' => 'custom_post_type' può essere rimosso, non è necessario

diogo.abdalla diogo.abdalla
10 mar 2018 16:13:29
Mostra i restanti 2 commenti
3

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');
22 nov 2014 12:10:52
Commenti

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.

Lucas Santos Lucas Santos
23 nov 2014 13:07:39

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

Helping Hands Helping Hands
24 nov 2014 07:13:27

Questo non funziona più perché genera un errore "headers already sent".

ZeroNine ZeroNine
19 dic 2020 22:19:26
0

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,
)
28 nov 2016 08:06:34
0

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.

30 lug 2016 08:43:57
0
-1

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();
2 mar 2018 11:36:59