È possibile nascondere l'interfaccia/menu dei Custom Post Type per ruoli utente specifici?

17 set 2011, 21:51:53
Visualizzazioni: 55.9K
Voti: 25

Quello che sto cercando di fare è nascondere completamente l'interfaccia UI per un custom post type da specifici ruoli utente... In precedenza ho trovato molte risorse su come disabilitare l'accesso all'utilizzo di questi CPT, ma nulla che permetta di nascondere completamente l'interfaccia UI dei CPT in base all'utente che ha effettuato l'accesso al pannello di amministrazione.

Questo è importante poiché ho bisogno che i clienti stiano completamente fuori dai custom post type del negozio, e se possono ancora vedere l'interfaccia UI del CPT del negozio nel pannello di amministrazione non fa differenza se le loro capacità sono limitate, dato che continueranno a chiedere come possono aggiungere prodotti in autonomia.

Preferirei non utilizzare un plugin per ottenere questo risultato, tuttavia se esistesse qualcosa che possa fare il lavoro in modo non appesantito andrebbe bene lo stesso.

Grazie per l'aiuto, SB

0
Tutte le risposte alla domanda 7
14
50

Come nascondere una voce di menu di un post type agli utenti non amministratori:

function wpse28782_remove_menu_items() {
    if( !current_user_can( 'administrator' ) ):
        remove_menu_page( 'edit.php?post_type=your_post_type' );
    endif;
}
add_action( 'admin_menu', 'wpse28782_remove_menu_items' );

your_post_type dovrebbe essere il nome del tuo effettivo post type.

MODIFICA -

Altre pagine di menu che puoi rimuovere:

remove_menu_page('edit.php'); // Articoli
remove_menu_page('upload.php'); // Media
remove_menu_page('link-manager.php'); // Collegamenti
remove_menu_page('edit-comments.php'); // Commenti
remove_menu_page('edit.php?post_type=page'); // Pagine
remove_menu_page('plugins.php'); // Plugin
remove_menu_page('themes.php'); // Aspetto
remove_menu_page('users.php'); // Utenti
remove_menu_page('tools.php'); // Strumenti
remove_menu_page('options-general.php'); // Impostazioni

MODIFICA 2 -

Rimozione delle voci di menu dei plugin.

Per i plugin, sembra che ti serva solo il parametro page= nella query. L'altra cosa da notare è la priorità, che è il terzo argomento di add_action per admin_menu. Deve essere impostata abbastanza bassa (più alto è il numero, più bassa è la priorità) in modo che i plugin abbiano già aggiunto se stessi al menu.

function wpse28782_remove_plugin_admin_menu() {
    if( !current_user_can( 'administrator' ) ):
        remove_menu_page('cart66_admin');
    endif;
}
add_action( 'admin_menu', 'wpse28782_remove_plugin_admin_menu', 9999 );
17 set 2011 22:14:36
Commenti

Una soluzione così semplice, grazie ha funzionato perfettamente!

Mr.Brown Mr.Brown
17 set 2011 22:28:11

Curioso, wpse28782_remove_menu_items è un nome di funzione scelto a caso o è specifico per WP? Inoltre, come potrei espandere questa idea per includere altri CPT o altri menu nativi di WP? Grazie ancora per l'aiuto!

Mr.Brown Mr.Brown
17 set 2011 22:32:36

@Mr.Brown - il nome della funzione si basa sull'id della tua domanda (controlla l'url), è semplicemente qualcosa che garantisce l'unicità, puoi chiamarla come preferisci purché non sia una funzione già esistente. Puoi anche aggiungere ulteriori chiamate remove_menu_page per rimuovere altri CPT, così come altri voci di menu, vedi la mia modifica.

Milo Milo
17 set 2011 23:05:01

Fantastico, grazie ancora. Questa è una soluzione incredibile.

Mr.Brown Mr.Brown
17 set 2011 23:06:51

Solo un'ultima cosa - come posso trovare il nome del template utilizzato per i menu aggiuntivi dei plugin attualmente installati? es. remove_menu_page('cart_plugin');

Mr.Brown Mr.Brown
17 set 2011 23:11:23

Ho provato a passare il mouse sopra la voce del menu e utilizzare il percorso che mi ha dato ma niente da fare, continua a comparire, anche se le altre voci del menu corrispondono esattamente quando ci passi sopra il mouse come nel tuo esempio...Sto usando il plugin cart66 e questo è il percorso che ho ottenuto quando ho passato il mouse sopra remove_menu_page( 'admin.php?page=cart66_admin' ); - ma non sembra funzionare.

Mr.Brown Mr.Brown
17 set 2011 23:23:03

@Mr.Brown - vedi la modifica sopra.

Milo Milo
18 set 2011 02:12:08

Fantastico, sei stato estremamente utile. Quindi tutti i plugin hanno bisogno solo dell'ultima parte del percorso e non di page=, giusto?

Mr.Brown Mr.Brown
18 set 2011 05:42:58

@Mr.Brown - Credo di sì, almeno quelli che ho visto. Come test, all'interno della tua funzione admin_menu puoi aggiungere global $menu; e poi print_r( $menu );, che rivelerà l'array da cui è costruito il menu (visualizza il sorgente della pagina, o racchiudilo in un tag <pre> per una migliore leggibilità). L'elemento con indice 2 in ogni sotto-array del menu è quello che vuoi usare con remove_menu_page

Milo Milo
18 set 2011 06:09:16

Milo - grazie mille amico!...questo forum è sempre fantastico, ma tu, signore, mi hai davvero aiutato a imparare qualcosa per una volta, quindi grazie per la tua pazienza e per aver dedicato del tempo a spiegare tutto per un principiante come me! Cordiali saluti, SB.

Mr.Brown Mr.Brown
18 set 2011 07:17:50

Nota che questa soluzione rimuove il menu, ma non impedisce all'utente di accedere a quelle pagine tramite URL.

MZAweb MZAweb
19 gen 2014 18:38:43

@MZAweb - vero, ma se leggi la domanda, non era quello che veniva chiesto. La possibilità di accedere alle pagine era già gestita tramite le capacità.

Milo Milo
19 gen 2014 18:45:52

Risposta eccellente, ha funzionato perfettamente... grazie per aver incluso anche come nascondere elementi diversi dai CPT.

Simon Simon
19 gen 2016 17:40:39

E per rimuovere Nuovo > Articolo | Media | Pagina | CPT? Basta usare l'hook admin_bar_menu - https://wordpress.stackexchange.com/a/76647/84219

jgraup jgraup
19 set 2018 23:25:40
Mostra i restanti 9 commenti
0

La risposta accettata può essere utilizzata per nascondere i tipi di post personalizzati (e altri elementi assortiti) come descritto. Ma se vuoi nascondere il menu stesso del plugin CPT UI, puoi anche rimuovere l'azione che lo aggiunge al menu in primo luogo.

if( !current_user_can( 'administrator' ) ) {
    remove_action( 'admin_menu', 'cptui_plugin_menu' );
}
15 ott 2018 16:21:23
0

Puoi anche utilizzare il plugin Adminimize. Questo plugin offre opzioni per tutti i tipi di post, metabox e molto altro ancora da nascondere in base ai diversi ruoli. Nessuna codifica richiesta.

11 gen 2013 21:29:12
0

Se vuoi nascondere il menu del plugin chiamato "Custom Post Type UI" (noto anche come CPTUI), non è possibile combinando il primo link con remove_menu_page.

Tutto quello che devi fare è:

function wpse_28782_remove_menus() {
    remove_menu_page('cptui_main_menu');
}
add_action('admin_init', 'wpse_28782_remove_menus');
20 dic 2018 21:57:08
0

Se vuoi disabilitare menu specifici per un determinato ruolo utente, utilizza questo codice:

function wp2024_remove_unnecessary_menus() {
    $current_user = wp_get_current_user();

    // Definisci i menu da rimuovere
    $menus_to_remove = [
        'elementor',
        'themes.php',
        'plugins.php',
    ];

    if ( in_array( 'user_role_slug', $current_user->roles, true ) ) {
        foreach ( $menus_to_remove as $menu_slug ) {
            remove_menu_page( $menu_slug );
        }
    }
}
add_action( 'admin_menu', 'wp2024_remove_unnecessary_menus', 99 );
22 nov 2024 10:21:37
0

Per nascondere i sottomenu di Woocommerce sotto il menu principale "Prodotti" per tutti i ruoli utente Shop Manager (Wordpress 5.1.1):

function remove_menus_shopmgr(){

// Se l'utente corrente è un gestore del negozio
if ( current_user_can('shop_manager') ) {

   //rimuove il sottomenu Prodotti > Categorie 
    remove_submenu_page( 'edit.php?post_type=product','edit-tags.php?taxonomy=product_cat&amp;post_type=product' );

   //rimuove il sottomenu Prodotti > Tag
    remove_submenu_page( 'edit.php?post_type=product','edit-tags.php?taxonomy=product_tag&amp;post_type=product' ); 

    }
}

add_action( 'admin_menu', 'remove_menus_shopmgr', 999 );
23 apr 2019 07:56:55
1

Se remove_menu_page non funziona per te (a me non ha funzionato) invece di rimuovere il menu, un'alternativa è dire a WordPress di non mostrare il menu per il tipo di post:

function wpse28782_hide_menu_items() {
    if( !current_user_can( 'administrator' ) ) {
        $post_type = get_post_type_object( 'your_post_type');
        if ($post_type) {
            $post_type->show_in_menu = false;
        }
    }
}
add_action( 'admin_menu', 'wpse28782_hide_menu_items', 99 );
11 set 2019 11:52:45
Commenti

Non sembra funzionare per me in una configurazione multisito.

Saqib Saqib
24 set 2024 16:53:25