È possibile nascondere l'interfaccia utente / menu del tipo di posta personalizzato da ruoli utente specifici?


20

Quello che sto cercando di fare è nascondere completamente l'interfaccia utente per un tipo di post personalizzato da ruoli utente specifici ... In precedenza ho trovato molte risorse su come disabilitare l'accesso all'utilizzo di tali CPT ma nulla che ti permetta davvero di nascondere completamente l'interfaccia utente CPT tutti insieme in base a quale utente è registrato nella dashboard.

Questo è importante poiché ho bisogno che i clienti rimangano completamente fuori dai tipi di posta personalizzati per il negozio e se riescono a vedere l'interfaccia utente CPT del negozio nella dashboard, non fa differenza se le loro capacità sono limitate dal momento che stanno ancora cercando come possono aggiungere il prodotto da soli come risultato.

Preferisco davvero non farlo con un plugin, tuttavia, se c'è qualcosa che può fare il trucco in modo non gonfio, sarebbe comunque fantastico, suppongo.

Grazie per l'aiuto, SB

Risposte:


39

Per nascondere una voce di menu di tipo post da 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 tipo di post attuale.

MODIFICARE-

altre pagine di menu che è possibile rimuovere:

remove_menu_page('edit.php'); // Posts
remove_menu_page('upload.php'); // Media
remove_menu_page('link-manager.php'); // Links
remove_menu_page('edit-comments.php'); // Comments
remove_menu_page('edit.php?post_type=page'); // Pages
remove_menu_page('plugins.php'); // Plugins
remove_menu_page('themes.php'); // Appearance
remove_menu_page('users.php'); // Users
remove_menu_page('tools.php'); // Tools
remove_menu_page('options-general.php'); // Settings

EDIT 2 -

Rimozione delle voci di menu del plug-in.

Per i plugin, sembra che tu abbia bisogno solo della page=query var. L'altra cosa da notare è la priorità, che è il terzo argomento del admin_menu add_action. Deve essere impostato abbastanza basso (maggiore è il numero, minore è la priorità) in modo che i plugin si siano già aggiunti 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 );

Una soluzione così semplice, grazie ha funzionato perfettamente!
Mr.Brown,

Curioso, il wpse28782_remove_menu_itemsnome di una funzione che hai scelto a caso o è specifico di WP? .... Inoltre, come potrei fare per espandere questa idea e scegliere come target altri CPT o, se del caso, altri menu WP nativi? Grazie ancora per l'aiuto!
Mr.Brown,

1
@ Mr.Brown - il nome della funzione si basa sull'ID della tua domanda (controlla l'URL), solo qualcosa di garantito per essere unico, puoi nominarlo come preferisci purché non sia una funzione esistente. puoi anche aggiungere ulteriori remove_menu_pagechiamate per rimuovere altri CPT, così come altre voci di menu, vedi la mia modifica.
Milo,

Così fantastico, grazie ancora. Questa è una soluzione straordinaria.
Mr.Brown,

Solo un'ultima cosa: come posso trovare il nome del modello utilizzato per i menu aggiuntivi dai plugin attualmente installati? vale a dire. remove_menu_page('cart_plugin');
Mr.Brown,

2

La risposta accettata può essere utilizzata per nascondere i tipi di post personalizzati (e altri articoli assortiti) come descritto. Ma se vuoi nascondere il menu stesso del plug-in dell'interfaccia utente CPT , 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' );
}

1

Puoi anche utilizzare il plug-in Adminimize . Questo plugin ha opzioni per tutti i tipi di post, meta box e molti altri da nascondere su ruoli diversi. Nessuna codifica.


0

Se vuoi nascondere il menu di quel plug-in il cui nome è "UI di tipo di posta personalizzato" aka CPTUI, non è possibile combinare 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');

0

Per nascondere i sottomenu di Woocommerce nel menu di livello superiore "Prodotti" per tutti i ruoli utente di Shop Manager (Wordpress 5.1.1):

function remove_menus_shopmgr(){

// If the current user is a shop manager
if ( current_user_can('shop_manager') ) {

   //removes Products > Categories submenu 
    remove_submenu_page( 'edit.php?post_type=product','edit-tags.php?taxonomy=product_cat&post_type=product' );

   //removes Products > Tags submenu
    remove_submenu_page( 'edit.php?post_type=product','edit-tags.php?taxonomy=product_tag&post_type=product' ); 

    }
}

add_action( 'admin_menu', 'remove_menus_shopmgr', 999 );

0

Se remove_menu_pagenon funziona per te (non per me), 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 );
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.