플러그인에 의해 삽입 된 관리자 메뉴 페이지를 제거하는 방법?


39

관리자 영역 내에서 사용되지 않을 많은 것들을 정리하는 다음 코드가 있습니다.

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

};

그러나 플러그인에서 삽입 된 두 개의 메뉴 항목이 있습니다.

각 메뉴 항목 위로 마우스를 가져 가면 링크가 다음과 같이 표시됩니다.

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

이 메뉴 페이지를 숨기는 방법이 있습니까?


어리석은 질문 일지 모르지만 문제의 플러그인을 비활성화 할 수있을 때 왜 관리자 메뉴를 해킹합니까?
eyoung100

5
@ eyoung100 몇 가지 이유가 있습니다. 가장 분명한 것은 특정 사용자 (역할) 에게 특정 기능 을 숨기는 것 입니다. 또한 관리자 메뉴를 재구성하여 특정 메뉴 항목을 제거했다가 다시 추가해야 할 수도 있습니다.
tfrommen

코딩을 통해 솔루션을 사용하는 경우 플러그인은 '관리'플러그인과 같은 컨텍스트에서 도우미입니다. 플러그인의 설정이 요구 사항이 아닌 경우 플러그인 목록에는 사용자 정의 코드를 통해 제거 해야하는 슬러그도 있습니다.
bueltge

답변:


61

올바른 후크 (URL / 슬러그와 항상 동일하지는 않음)를 사용해야하며 나중에 실행되는 후크 (예 :)를 사용하는 것은 문제가되지 않습니다 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' );
}

다음을 사용하여 디버깅 할 수 있습니다.

add_action( 'admin_init', 'wpse_136058_debug_admin_menu' );

function wpse_136058_debug_admin_menu() {

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

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
        )

2가있는 배열 요소 는 당신이 찾고있는 것입니다 : wpcf7.


5
메뉴를 버리고 사용할 remove_menu_page()음식을 찾는 방법을 보여주는 것은 큰 도움이되었습니다. 물고기를 건네는 대신 물고기를 잡는 방법을 가르쳐 주셨습니다!
Matthew Clark

acf에 대한 더 나은 접근 방법은 문서를
hitautodestruct

디버그 코드는 큰 도움이됩니다. 공유 주셔서 감사합니다!
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

당신은 당신이 필요로하는 모든 정보를 얻기 위해 다음과 함께이 모든 것을 디버깅 할 수 있습니다 :

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;

키를 사용하면 워드 프레스 전역 으로이 모든 작업을 수행 할 수있는 배열 값이 제공됩니다 (권장하지는 않지만)

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

또한 특정 사용자를 제거하려면 기능이 추가 된 경우를 제외하고 동일한 작업을 수행하십시오.

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

왜 우리의 규범을 밝히지 않는가? remove_submenu_page를 50 번 쓰는 것을 방지하기 위해 배열을 사용할 수 있습니다. 툴바 노드에서도 작동합니다.

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

add_action 우선 순위 를 더 높은 수로 설정하고 두 개의 새 링크를 구체적으로 다음과 같이 타겟팅해야합니다.

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

고급 사용자 정의 필드는 메뉴에서이 작업을 수행하는 방법에 대한 도움말 문서도 제공합니다.

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

Contact Form 7에는 메뉴의 가시성을 제한하는 자체 방법이 있습니다.

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


contactform7은 나를 사용하여 나를 위해 일했다remove_menu_page( 'wpcf7' );
Abel Melquiades Callejo

8

최신 정보

내가 코드 조각을 만들어 더욱 강력한 기능이 메인 메뉴와 하위 메뉴 항목을 모두 다룬다.

원래 답변

제거하려는 메뉴를 지정하는 대신 유지하려는 메뉴를 지정하십시오. :)

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

} 

이런 식으로 새 플러그인을 추가 할 때 플러그인 이름을 검색하고 코드를 수정할 필요가 없습니다.


정확히 내가 찾던 것! 또한 코드 스 니펫은 훌륭한 것 같습니다! 솔루션을 추가해 주셔서 감사합니다. 감사합니다!
Devner

5

올바른 $ menu_slug를 찾아야합니다. 다음 코드는 저에게 효과적이었습니다.

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

4

물론 제거하려는 항목 만 지정할 수 있습니다. 아래 코드를 살펴보십시오.

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

} 

이것은 numediaweb의 방법의 단점입니다. @numediaweb 감사합니다. 잘 작동합니다.

추신 : 'menu_item_1 / n'-> 메뉴 항목 위에 마우스를 놓고 링크에 표시된 해당 메뉴 항목의 정확한 페이지를 가져옵니다.


0

이 코드 스 니펫을 사용하십시오

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

제발 편집 답변을 하고, 설명을 추가 : 문제를 해결할 수있는?
fuxia
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.