Bagaimana cara menghapus halaman menu admin yang dimasukkan oleh plugin?

39

Saya mendapat kode berikut, yang membersihkan banyak hal yang tidak akan digunakan dalam area admin:

add_action( 'admin_menu', 'my_remove_menu_pages' );

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

};

Namun, ada dua item menu yang telah dimasukkan dari plugin.

Ketika saya mengarahkan kursor ke setiap item menu, dikatakan tautannya adalah:

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

Apakah ada cara untuk menyembunyikan halaman menu ini juga?

tmyie
sumber
Mungkin bodoh untuk bertanya, tetapi mengapa meretas menu admin, ketika Anda bisa menonaktifkan plugin yang dimaksud?
eyoung100
5
@ eyoung100 Ada beberapa alasan. Yang paling jelas adalah menyembunyikan fungsionalitas tertentu dari pengguna (peran) tertentu. Juga orang mungkin ingin merestrukturisasi menu admin, dan karenanya perlu menghapus (dan menambahkan kembali) entri menu tertentu.
tfrommen
Jika Anda akan menggunakan solusi melalui pengkodean, sebuah plugin adalah penolong dalam konteks, seperti plugin 'Adminimize'. Daftar plugin juga siput di sana diperlukan untuk menghapus melalui kode kustom jika pengaturan plugin bukan kebutuhan Anda.
bueltge

Jawaban:

61

Anda perlu menggunakan kait yang tepat (yang tidak selalu sama dengan URL / siput), dan tidak ada salahnya menggunakan kait yang berjalan kemudian (misalnya, 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' );
}

Anda dapat menggunakan yang berikut ini untuk men-debug:

add_action( 'admin_init', 'wpse_136058_debug_admin_menu' );

function wpse_136058_debug_admin_menu() {

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

Ini memberi (untuk pengaturan saya) berikut ini untuk halaman menu plugin Contact Form 7:

[27] => Array
        (
            [0] => Formular
            [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
        )

Array elemen dengan kunci 2adalah apa yang Anda cari: wpcf7.

para pria
sumber
5
Memperlihatkan cara membuang menu dan menemukan apa yang akan digunakan remove_menu_page()adalah bantuan besar - ajari saya cara memancing, bukan hanya menyerahkan saya ikan!
Matthew Clark
Untuk ACF ada pendekatan yang lebih baik lihat dokumen
hitautodestruct
Kode debug sangat membantu. Terima kasih banyak untuk berbagi!
Devner
17
    // PLUGINS THAT ADD AS DASHBOARD SUBMENU
    // IF THIS IS THE URL BELOW - THE PAGE VARIABLE IS WHAT I NEED ( SO WHATEVER COMES AFTER PAGE= )
    // http://example.com/wp-admin/index.php?page=iconize-plugin-update-notifier
    remove_submenu_page( 'index.php', 'iconize-plugin-update-notifier' );

    // OR FOR EXAMPLE WOOCOMMERCE DASHBOARD SUBMENU
    remove_submenu_page( 'index.php', 'wc-about' ); //WOO
    remove_submenu_page( 'index.php', 'wc-credits' ); //WOO
    remove_submenu_page( 'index.php', 'wc-translators' ); //WOO

    // CUSTOM POST TYPE TOP LEVELS
    remove_menu_page( 'edit.php?post_type={$POST_TYPE}' ); //LOOK FOR WHAT COMES AFTER POST TYPE IN THE URL
    remove_menu_page( 'edit.php?post_type=testimonials-widget' ); //TESTIMONIALS WIDGET
    remove_menu_page( 'edit.php?post_type=product' ); //WOOCOMMERCE

    // CUSTOM POST TYPE SUBMENU
     remove_submenu_page( 'edit.php?post_type={$POST_TYPE}', '{$SUBMENU_URL_VARIABLE}' ); //EXAMPLE FORMAT
     // SO IF BELOW IS THE URL
     // http://example.com/wp-admin/edit.php?post_type=testimonials-widget&page=testimonialswidget_settings
     // YOU NEED TO SEE WHATS AFTER PAGE
     remove_submenu_page( 'edit.php?post_type=testimonials-widget', 'testimonialswidget_settings' ); //TESTIMONIALS WIDGET

    // OTHER EXAMPLES
    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

ANDA DAPAT MENGANDUNG SEMUA INI DENGAN BERIKUT UNTUK MENDAPATKAN SEMUA INFO YANG ANDA BUTUHKAN:

if (!function_exists('debug_admin_menus')):
function debug_admin_menus() {
if ( !is_admin())
        return;
    global $submenu, $menu, $pagenow;
    if ( current_user_can('manage_options') ) { // ONLY DO THIS FOR ADMIN
        if( $pagenow == 'index.php' ) {  // PRINTS ON DASHBOARD
            echo '<pre>'; print_r( $menu ); echo '</pre>'; // TOP LEVEL MENUS
            echo '<pre>'; print_r( $submenu ); echo '</pre>'; // SUBMENUS
        }
    }
}
add_action( 'admin_notices', 'debug_admin_menus' );
endif;

Kunci akan memberi Anda nilai array yang memungkinkan Anda melakukan semua ini dengan global wordpress (meskipun tidak disarankan)

function remove_submenus_all_please() {
if ( !is_admin())
        return;
  global $submenu;
    unset($submenu['index.php'][10]); // Removes Updates
  //Posts menu
 // unset($submenu['edit.php'][5]); // Leads to listing of available posts to edit
 // unset($submenu['edit.php'][10]); // Add new post
 // unset($submenu['edit.php'][15]); // Remove categories
 // unset($submenu['edit.php'][16]); // Removes Post Tags
}
add_action('admin_menu', 'remove_submenus_all_please', 999);

Dan untuk menghapus untuk pengguna tertentu lakukan hal yang sama kecuali dengan kemampuan yang ditambahkan:

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);

DAN UNTUK MENGATAKANNYA SEMUA BERSAMA MENGAPA TIDAK MENYINGKIRKAN KODE KAMI? ANDA BISA MENGGUNAKAN ARRAYS UNTUK MENGHINDARI MENULIS remove_submenu_page 50 kali. Ini juga berfungsi dengan node bilah alat:

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
Bryan Willis
sumber
15

Anda mungkin perlu mengatur prioritas add_action ke angka yang lebih tinggi dan menargetkan dua tautan baru secara khusus seperti:

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

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

Bidang Kustom Tingkat Lanjut juga menyediakan dokumen bantuan tentang cara melakukan ini untuk menu mereka di sini:

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

Formulir Kontak 7 juga memiliki caranya sendiri untuk membatasi visibilitas menu:

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

hereswhatidid
sumber
menyembunyikan contactform7 bekerja untuk saya dengan menggunakanremove_menu_page( 'wpcf7' );
Abel Melquiades Callejo
8

Memperbarui

saya membuat cuplikan kode dengan fungsi yang lebih kuat yang berhubungan dengan menu utama dan sub-menu.

Jawaban asli

Alih-alih menentukan menu yang ingin Anda hapus, tentukan menu yang ingin Anda simpan :)

add_action('admin_init', 'nwcm_admin_init');

function nwcm_admin_init()
{   
    // Remove unnecessary menus 
    $menus_to_stay = array(
        // Client manager
        'nwcm',

        // Dashboard
        'index.php',

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

} 

Dengan cara ini Anda tidak perlu mencari nama plugin dan memodifikasi kode ketika Anda menambahkan plugin baru ..

numediaweb
sumber
Persis apa yang saya cari! Cuplikan kode Anda juga tampak hebat! Terima kasih banyak untuk menambahkan solusi Anda. Menghargai itu!
Devner
5

Anda perlu menemukan $ menu_slug yang tepat. Kode berikut ini berfungsi untuk saya:

add_action( 'admin_init', 'remove_menus' );
function remove_menus(){
  remove_menu_page( 'wpcf7' );
}
Vincent Wong
sumber
4

Tentu saja Anda dapat menentukan hanya item yang ingin Anda hapus. Lihat kode di bawah ini:

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


add_action('admin_init', 'nwcm_admin_init');

function nwcm_admin_init()
{   
// Remove unnecessary menus 
$menus_to_remove = array(
    // menu items you want to remove
    'menu_item_1',
    'menu_item_2',
    .
    .
    'menu_item_n'
);     

// To avoid warning message, check whether 'menu' is set AND is an array
if(isset($GLOBALS['menu']) && is_array($GLOBALS['menu'])) {
   foreach ($GLOBALS['menu'] as $key => $value) {  
     //Remove the '!' in the 'if' condition.        
     if (in_array($value[2], $menus_to_remove)) remove_menu_page($value[2]);
   }
}   

} 

Ini hanya negatif dari metode numediaweb. Terima kasih @numediaweb. Ini bekerja dengan baik.

PS: 'menu_item_1 / n' -> arahkan mouse ke item menu dan ambil halaman yang tepat dari item menu yang ditampilkan di tautan.

Prabhu Chelladurai
sumber
0

gunakan potongan kode ini

function your_custom_name() {    
    remove_menu_page('vc-general'); //the slug as seen wp-admin.php?page=vc-general  
}    
add_action( 'admin_init', 'your_custom_name' );
DoubleAsam
sumber
Harap edit jawaban Anda , dan tambahkan penjelasan: mengapa itu bisa menyelesaikan masalah?
fuxia