Làm cách nào để xóa các trang menu quản trị viên được chèn bởi plugin?


39

Tôi đã nhận được đoạn mã sau, giúp dọn sạch rất nhiều thứ sẽ không được sử dụng trong khu vực quản trị:

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

};

Tuy nhiên, có hai mục menu đã được chèn từ plugin.

Khi tôi di chuột qua từng mục menu, nó nói các liên kết là:

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

Có cách nào để ẩn các trang menu này không?


Có thể là ngu ngốc để hỏi, nhưng tại sao hack menu quản trị, khi bạn có thể tắt các plugin trong câu hỏi?
Eyoung100

5
@ eyoung100 Có nhiều lý do. Điều rõ ràng nhất sẽ là ẩn chức năng nhất định khỏi (các vai trò) người dùng cụ thể. Ngoài ra, người ta có thể muốn cơ cấu lại menu quản trị, và do đó cần phải loại bỏ (và thêm lại một lần nữa) các mục menu nhất định.
tfrommen

Nếu bạn sẽ sử dụng giải pháp thông qua mã hóa, thì plugin là một người trợ giúp trong ngữ cảnh, như plugin 'Quản trị hóa'. Danh sách plugin cũng là những con sên cần thiết để loại bỏ thông qua mã tùy chỉnh nếu cài đặt của plugin không phải là yêu cầu của bạn.
bueltge

Câu trả lời:


61

Bạn cần sử dụng đúng móc (không phải lúc nào cũng giống với URL / sên) và sẽ không hại gì khi sử dụng móc chạy sau (ví dụ 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' );
}

Bạn có thể sử dụng cách sau để gỡ lỗi:

add_action( 'admin_init', 'wpse_136058_debug_admin_menu' );

function wpse_136058_debug_admin_menu() {

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

Điều này mang lại (cho thiết lập của tôi) các mục sau cho trang trình đơn plugin Liên hệ 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
        )

Phần tử mảng với khóa 2là những gì bạn đang tìm kiếm : wpcf7.


5
Chỉ ra cách bỏ thực đơn và tìm những gì để sử dụng remove_menu_page()là một sự trợ giúp lớn - dạy tôi cách câu cá thay vì chỉ đưa cho tôi con cá!
Matthew Clark

Đối với acf, có một cách tiếp cận tốt hơn, xem các tài liệu
hitautodesturation

Mã gỡ lỗi là rất hữu ích. Cảm ơn rất nhiều vì đã chia sẻ!
Devner

16
    // 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

BẠN CÓ THỂ DEBUG TẤT CẢ ĐIỀU NÀY VỚI SAU ĐỂ NHẬN ĐƯỢC TẤT CẢ THÔNG TIN BẠN CẦN:

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;

Các khóa sẽ cung cấp cho bạn các giá trị mảng cho phép bạn thực hiện tất cả điều này với toàn cầu wordpress (mặc dù không được khuyến nghị)

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

Và để loại bỏ đối với một số người dùng, chỉ cần thực hiện điều tương tự ngoại trừ với các khả năng được thêm vào:

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

VÀ ĐỂ KIẾM ĐƯỢC TẤT CẢ MỌI THỨ TẠI SAO KHÔNG NGẮN MÃ SỐ CỦA CHÚNG TÔI? BẠN CÓ THỂ SỬ DỤNG ARRAYS ĐỂ TRÁNH VIẾT VIẾT remove_submenu_page 50 lần. Điều này cũng hoạt động với các nút thanh công cụ:

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

15

Bạn có thể cần đặt mức độ ưu tiên add_action thành số cao hơn và nhắm mục tiêu hai liên kết mới đó cụ thể như vậy:

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

Trường tùy chỉnh nâng cao cũng cung cấp tài liệu trợ giúp về cách thực hiện việc này cho menu của họ tại đây:

http://www.advifiedcustomfields.com/resource/how-to/how-to- leather-acf-menu-from-clents /

Mẫu liên hệ 7 cũng có cách hạn chế khả năng hiển thị của menu:

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


ẩn contactform7 làm việc cho tôi bằng cách sử dụngremove_menu_page( 'wpcf7' );
Abel Melquiades Callejo

8

Cập nhật

Tôi đã tạo một đoạn mã với chức năng mạnh mẽ hơn, liên quan đến cả menu chính và các mục menu phụ.

Câu trả lời gốc

Thay vì chỉ định các menu bạn muốn xóa, hãy chỉ định các mối đe dọa bạn muốn giữ :)

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

} 

Bằng cách này, bạn không phải tìm kiếm tên plugin và sửa đổi mã khi bạn thêm plugin mới ..


Chính xác những gì tôi đang tìm kiếm! Ngoài ra đoạn mã của bạn có vẻ như là một tuyệt vời! Cảm ơn rất nhiều vì đã thêm giải pháp của bạn. Cảm kích điều đó!
Devner

5

Bạn cần tìm đúng $ menu_slug. Các mã sau đây làm việc cho tôi:

add_action( 'admin_init', 'remove_menus' );
function remove_menus(){
  remove_menu_page( 'wpcf7' );
}

4

Tất nhiên bạn chỉ có thể chỉ định các mục bạn muốn loại bỏ. Hãy xem mã dưới đây:

/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]);
   }
}   

} 

Đây chỉ là tiêu cực của phương pháp numediaweb. Cảm ơn @numediaweb. Nó hoạt động tốt.

PS: 'menu_item_1 / n' -> trỏ chuột vào mục menu và tìm nạp trang chính xác của mục menu đó được hiển thị trong liên kết.


0

sử dụng đoạn mã này

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

Vui lòng chỉnh sửa câu trả lời của bạn và thêm một lời giải thích: tại sao điều đó có thể giải quyết vấn đề?
fuxia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.