Come rimuovere le pagine del menu amministratore inserite dai plugin?

26 feb 2014, 20:17:02
Visualizzazioni: 108K
Voti: 53

Ho il seguente codice, che rimuove molti elementi che non verranno utilizzati nell'area di amministrazione:

add_action( 'admin_menu', 'my_remove_menu_pages' );

function my_remove_menu_pages() {
  remove_menu_page( 'edit.php' );                   //Articoli
  remove_menu_page( 'upload.php' );                 //Media
  remove_menu_page( 'edit-comments.php' );          //Commenti
  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

};

Tuttavia, ci sono due voci di menu che sono state inserite dai plugin.

Quando passo il mouse su ciascuna voce di menu, i link mostrati sono:

/wp-admin/edit.php?post_type=acf
/wp-admin/admin.php?page=wpcf7

C'è un modo per nascondere anche queste pagine del menu?

3
Commenti

Può sembrare una domanda stupida, ma perché hackerare il menu di amministrazione quando potresti semplicemente disattivare i plugin in questione?

eyoung100 eyoung100
24 mag 2014 00:27:08

@eyoung100 Ci sono diverse ragioni. La più evidente sarebbe quella di nascondere determinate funzionalità a specifici ruoli utente. Inoltre, si potrebbe voler riorganizzare il menu di amministrazione, e quindi necessitare di rimuovere (e poi riaggiungere) alcune voci del menu.

tfrommen tfrommen
23 ott 2014 20:16:54

Se volessi utilizzare una soluzione via codice, un plugin è un aiuto nel contesto, come il plugin 'Adminimize'. La lista dei plugin mostra anche gli slug necessari da rimuovere tramite codice personalizzato se le impostazioni del plugin non soddisfano le tue esigenze.

bueltge bueltge
22 mag 2019 10:22:50
Tutte le risposte alla domanda 7
3
90

Devi utilizzare i hook corretti (che non sempre corrispondono agli URL/slug), e non fa male usare un hook che viene eseguito più tardi (ad esempio, admin_init):

add_action( 'admin_init', 'wpse_136058_remove_menu_pages' );

function wpse_136058_remove_menu_pages() {

    remove_menu_page( 'edit.php?post_type=acf' );
    remove_menu_page( 'wpcf7' );
}

Puoi utilizzare il seguente codice per il debug:

add_action( 'admin_init', 'wpse_136058_debug_admin_menu' );

function wpse_136058_debug_admin_menu() {

    echo '<pre>' . print_r( $GLOBALS[ 'menu' ], TRUE) . '</pre>';
}

Questo restituisce (per la mia configurazione) il seguente risultato per la pagina del menu del plugin Contact Form 7:

[27] => Array
        (
            [0] => Modulo
            [1] => wpcf7_read_contact_forms
            [2] => wpcf7
            [3] => Contact Form 7
            [4] => menu-top menu-icon-generic toplevel_page_wpcf7 menu-top-last
            [5] => toplevel_page_wpcf7
            [6] => none
        )

L'elemento dell'array con chiave 2 è quello che stai cercando: wpcf7.

26 feb 2014 20:29:13
Commenti

Mostrare come scaricare il menu e trovare cosa usare per remove_menu_page() è stato di enorme aiuto — mi ha insegnato a pescare invece di semplicemente darmi il pesce!

Matthew Clark Matthew Clark
20 giu 2016 22:34:48

Per acf c'è un approccio migliore, vedi la documentazione

hitautodestruct hitautodestruct
12 feb 2017 12:55:01

Il codice di debug è di grande aiuto. Grazie mille per averlo condiviso!

Devner Devner
14 lug 2019 20:14:00
0
26
    // PLUGIN CHE AGGIUNGONO SOTTOMENU NELLA DASHBOARD
    // SE QUESTO È L'URL SOTTOSTANTE - LA VARIABILE PAGE È QUELLA CHE MI SERVE (QUALUNQUE COSA SIA DOPO PAGE= )
    // http://example.com/wp-admin/index.php?page=iconize-plugin-update-notifier
    remove_submenu_page( 'index.php', 'iconize-plugin-update-notifier' );

    // O PER ESEMPIO I SOTTOMENU DELLA DASHBOARD DI WOOCOMMERCE
    remove_submenu_page( 'index.php', 'wc-about' ); //WOO
    remove_submenu_page( 'index.php', 'wc-credits' ); //WOO
    remove_submenu_page( 'index.php', 'wc-translators' ); //WOO

    // MENU PRINCIPALI DI CUSTOM POST TYPE
    remove_menu_page( 'edit.php?post_type={$POST_TYPE}' ); //CERCA CIÒ CHE VIENE DOPO POST TYPE NELL'URL
    remove_menu_page( 'edit.php?post_type=testimonials-widget' ); //TESTIMONIALS WIDGET
    remove_menu_page( 'edit.php?post_type=product' ); //WOOCOMMERCE

    // SOTTOMENU DI CUSTOM POST TYPE
     remove_submenu_page( 'edit.php?post_type={$POST_TYPE}', '{$SUBMENU_URL_VARIABLE}' ); //FORMATO ESEMPIO
     // QUINDI SE L'URL È IL SEGUENTE
     // http://example.com/wp-admin/edit.php?post_type=testimonials-widget&page=testimonialswidget_settings
     // DEVI VEDERE CIÒ CHE VIENE DOPO PAGE
     remove_submenu_page( 'edit.php?post_type=testimonials-widget', 'testimonialswidget_settings' ); //TESTIMONIALS WIDGET

    // ALTRI ESEMPI
    remove_menu_page( 'revslider' ); // REVSLIDER
    remove_menu_page( 'woocommerce' ); // WOOCOMMERCE
    remove_menu_page( 'order-post-types-shop_order' ); // WOOCOMMERCE
    remove_menu_page( 'order-post-types-shop_coupons' ); // WOOCOMMERCE
    remove_menu_page( 'shortcodes-ultimate' ); // SHORTCODES ULTIMATE
    remove_menu_page( 'wp-admin-microblog/wp-admin-microblog.php' ); // ADMIN MICROBLOG
    remove_menu_page( 'snippets' ); //CODE SNIPPETS
    remove_menu_page( 'gf_edit_forms' ); // GRAVITY FORMS
        remove_submenu_page( 'gf_edit_forms', 'gf_settings' ); // GRAVITY FORMS
        remove_submenu_page( 'gf_edit_forms', 'gf_export' ); // GRAVITY FORMS
        remove_submenu_page( 'gf_edit_forms', 'gf_update' ); // GRAVITY FORMS
        remove_submenu_page( 'gf_edit_forms', 'gf_addons' ); // GRAVITY FORMS
        remove_submenu_page( 'gf_edit_forms', 'gf_help' ); // GRAVITY FORMS

        remove_submenu_page( 'cleverness-to-do-list', 'cleverness-to-do-list-settings' ); //Cleverness TODO

PUOI DEBUGGARE TUTTO QUESTO CON IL SEGUENTE CODICE PER OTTENERE TUTTE LE INFORMAZIONI NECESSARIE:

if (!function_exists('debug_admin_menus')):
function debug_admin_menus() {
if ( !is_admin())
        return;
    global $submenu, $menu, $pagenow;
    if ( current_user_can('manage_options') ) { // SOLO PER AMMINISTRATORI
        if( $pagenow == 'index.php' ) {  // STAMPA NELLA DASHBOARD
            echo '<pre>'; print_r( $menu ); echo '</pre>'; // MENU PRINCIPALI
            echo '<pre>'; print_r( $submenu ); echo '</pre>'; // SOTTOMENU
        }
    }
}
add_action( 'admin_notices', 'debug_admin_menus' );
endif;

Le chiavi ti forniranno i valori dell'array che ti permettono di fare tutto questo con le variabili globali di WordPress (sebbene non sia raccomandato)

function remove_submenus_all_please() {
if ( !is_admin())
        return;
  global $submenu;
    unset($submenu['index.php'][10]); // Rimuove Aggiornamenti
  //Menu Articoli
 // unset($submenu['edit.php'][5]); // Porta all'elenco degli articoli disponibili da modificare
 // unset($submenu['edit.php'][10]); // Aggiungi nuovo articolo
 // unset($submenu['edit.php'][15]); // Rimuovi categorie
 // unset($submenu['edit.php'][16]); // Rimuove i tag degli articoli
}
add_action('admin_menu', 'remove_submenus_all_please', 999);

E per rimuovere per determinati utenti basta fare la stessa cosa ma aggiungendo i permessi:

function remove_by_caps_admin_menu() {
if ( !is_admin())
        return;
    if ( !current_user_can('manage_options') ) {
        remove_menu_page( 'revslider' ); // REVSLIDER
    } elseif ( !current_user_can('edit_posts') ) {
        remove_menu_page( 'woocommerce' ); // WOO
    } else {
    }
}
add_action('admin_menu', 'remove_by_caps_admin_menu', 999);

E PER UNIRE TUTTO INSIEME PERCHÉ NON ACCORCIARE IL NOSTRO CODICE? PUOI USARE GLI ARRAY PER EVITARE DI SCRIVERE remove_submenu_page 50 VOLTE. Funziona anche con i nodi della toolbar:

if ( !function_exists( 'remove_admin_menupages_in_array' ) ) {
function remove_admin_menupages_in_array() {
    if ( !is_admin())
        return;
          $admin_menus = array(
                                'revslider',
                                'woocommerce',
                                'shortcodes-ultimate',
          );

    foreach ( $admin_menus as $menu_page ) {
        if ( !current_user_can('manage_options') ) {
            remove_menu_page( $menu_page );
        }
    } // foreach
 } // function
add_action('admin_menu', 'remove_admin_menupages_in_array', 9999);
} // exists
25 ago 2014 08:25:59
1
20

Probabilmente è necessario impostare la priorità di add_action priority su un numero più alto e specificare i due nuovi link in questo modo:

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

function my_remove_menu_pages() {
  remove_menu_page( 'edit.php' );                   //Articoli
  remove_menu_page( 'upload.php' );                 //Media
  remove_menu_page( 'edit-comments.php' );          //Commenti
  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
  remove_menu_page( 'edit.php?post_type=acf' );
  remove_menu_page( 'wpcf7' );
};

Advanced Custom Fields fornisce anche un documento di aiuto su come fare questo per il loro menu qui:

http://www.advancedcustomfields.com/resources/how-to/how-to-hide-acf-menu-from-clients/

Anche Contact Form 7 ha il suo modo per limitare la visibilità del menu:

http://contactform7.com/restricting-access-to-the-administration-panel/

26 feb 2014 20:24:29
Commenti

nascondere contactform7 ha funzionato per me usando remove_menu_page( 'wpcf7' );

Abel Melquiades Callejo Abel Melquiades Callejo
8 giu 2016 11:29:08
1
10

Aggiornamento

Ho creato uno snippet di codice con una funzione più robusta che gestisce sia i menu principali che le voci dei sottomenu.

Risposta originale

Invece di specificare i menu che vuoi rimuovere, specifica i menu che vuoi mantenere :)

add_action('admin_init', 'nwcm_admin_init');

function nwcm_admin_init()
{   
    // Rimuove i menu non necessari 
    $menus_to_stay = array(
        // Client manager
        'nwcm',

        // Dashboard
        'index.php',

        // Utenti
        'users.php'
    );      
    foreach ($GLOBALS['menu'] as $key => $value) {          
        if (!in_array($value[2], $menus_to_stay)) remove_menu_page($value[2]);
    }   

} 

In questo modo non devi cercare i nomi dei plugin e modificare il codice quando aggiungi nuovi plugin..

7 set 2014 18:39:54
Commenti

Esattamente quello che stavo cercando! Anche il tuo snippet di codice sembra fantastico! Grazie mille per aver aggiunto la tua soluzione. Lo apprezzo molto!

Devner Devner
14 lug 2019 19:45:46
0

Certo, puoi specificare solo gli elementi che vuoi rimuovere. Dai un'occhiata al codice qui sotto:

/wordpress/wp-content/plugins/your_plugin/your_plugin.php :


add_action('admin_init', 'nwcm_admin_init');

function nwcm_admin_init()
{   
// Rimuovi menu non necessari 
$menus_to_remove = array(
    // elementi del menu che vuoi rimuovere
    'menu_item_1',
    'menu_item_2',
    .
    .
    'menu_item_n'
);     

// Per evitare messaggi di warning, verifica se 'menu' è impostato E se è un array
if(isset($GLOBALS['menu']) && is_array($GLOBALS['menu'])) {
   foreach ($GLOBALS['menu'] as $key => $value) {  
     //Rimuovi il '!' nella condizione 'if'.        
     if (in_array($value[2], $menus_to_remove)) remove_menu_page($value[2]);
   }
}   

} 

Questo è semplicemente il negativo del metodo di numediaweb. Grazie @numediaweb. Funziona perfettamente.

P.S.: 'menu_item_1/n' -> posiziona il mouse sopra l'elemento del menu e prendi l'esatta pagina di quell'elemento mostrato nel link.

3 dic 2014 14:57:23
0

Devi trovare il corretto $menu_slug. Il seguente codice ha funzionato per me:

add_action( 'admin_init', 'remove_menus' );
function remove_menus(){
  remove_menu_page( 'wpcf7' );
}
22 gen 2015 05:53:37
1

utilizza questo frammento di codice

function tuo_nome_personalizzato() {    
    remove_menu_page('vc-general'); //lo slug come visibile in wp-admin.php?page=vc-general  
}    
add_action( 'admin_init', 'tuo_nome_personalizzato' );
14 feb 2018 17:37:37
Commenti

Per favore [modifica] la tua risposta e aggiungi una spiegazione: perché questa soluzione potrebbe risolvere il problema?

fuxia fuxia
14 feb 2018 19:10:41