当前浏览:首页 / WordPress函数 / remove_menu_page()

remove_menu_page( string $menu_slug )

删除顶级管理菜单

menu_page 菜单页more...

removemore...


描述

用法示例:

  • remove_menu_page( 'tools.php' )
  • remove_menu_page( 'plugin_menu_slug' )

参数

$menu_slug

(string)(必填) 菜单的slug


返回

(array|false) 成功时删除的菜单,如果未找到则为false。


更多信息

参数$menu_slug是菜单的slug,内置菜单项通常是的PHP脚本的名称,例如:edit-comments.php。

应在admin_menu动作钩子上调用此函数。在其他地方调用它可能会导致问题:函数未定义,或者使用了全局$menu变量,但尚未声明此函数。

要删除:子菜单项,使用remove_submenu_page(),使用remove_menu_page()对子菜单项无效。


源码

查看源码 官方文档


更新日志

版本描述
3.1.0开始引入

使用示例

  • 示例1

    您需要使用正确的钩子(这些钩子并不总是与URLs/slugs)相同,使用稍后运行的钩子也没有什么坏处(例如admin_init)

    add_action( 'admin_init', function () {
        remove_menu_page( 'edit.php?post_type=participants-database' );
        remove_menu_page( 'wpcf7' );
    });

    您可以使用以下方法进行调试:

    add_action( 'admin_init', function () {
        echo '<pre>' . print_r( $GLOBALS[ 'menu' ], true) . '</pre>';
    } );

    这将为您提供菜单位置数组和活动菜单项数组的内部位置,您只需要选择右钩子(键[2]),在该钩子下是您的目标钩子或URI。

    这里有一个辅助函数:

    if(!function_exists('remove_admin_page')) {
        function remove_admin_page($needle) {
            if(isset($GLOBALS[ 'menu' ]) && !empty($GLOBALS[ 'menu' ]) && !empty($needle)) {
    
                $needle = strtolower($needle);
                $needle = trim($needle);
    
                foreach($GLOBALS[ 'menu' ] as $position => $items) {
                    foreach($items as $key => $item) {					
                        if(strtolower($item) == $needle) {
                            remove_menu_page( $items[2] );
                        }
                    }
                }
            }
        }
    }

    就像这样使用它:

    remove_admin_page( 'Participants Database' );

    这个辅助按名称、slug、uri进行搜索,并删除正确的菜单页。

  • 示例2

    实例

    删除所有用户的每个菜单。要仅删除某些菜单项,请仅包括要隐藏在函数中的菜单项。要仅删除某些用户的菜单,您可能需要使用current_user_can()。

    /**
     * Removes some menus by page.
     */
    function wpdocs_remove_menus(){
      
      remove_menu_page( 'index.php' );                  //Dashboard
      remove_menu_page( 'jetpack' );                    //Jetpack* 
      remove_menu_page( 'edit.php' );                   //Posts
      remove_menu_page( 'upload.php' );                 //Media
      remove_menu_page( 'edit.php?post_type=page' );    //Pages
      remove_menu_page( 'edit-comments.php' );          //Comments
      remove_menu_page( 'themes.php' );                 //Appearance
      remove_menu_page( 'plugins.php' );                //Plugins
      remove_menu_page( 'users.php' );                  //Users
      remove_menu_page( 'tools.php' );                  //Tools
      remove_menu_page( 'options-general.php' );        //Settings
      
    }
    add_action( 'admin_menu', 'wpdocs_remove_menus' );
    ?>
    

    (*) 如果处理jetpack菜单,最好添加此优先级:add_action( ‘admin_menu’, ‘remove_menus’, 999 );

  • 示例3

    基于之前的贡献,我开发了一个脚本来创建钩子函数,可以删除所有菜单。然后我可以选择显示哪些页面,评论或删除行。

    您需要将其放入functions.php并加载wp-admin。然后将输出复制到functions.php并删除脚本。

    add_action( 'admin_init', function () {
    	echo "add_action( 'admin_init', function () {<br>";
    
    	foreach ( $GLOBALS['menu'] as $menu ) {
    		echo "&nbsp;&nbsp;&nbsp;&nbsp;remove_menu_page( '$menu[2]' );<br>";
    	}
    
    	echo "}, PHP_INT_MAX );";
    	exit();
    } );
    
  • 示例4

    请注意'admin_menu'对于某些菜单可能不够。我在一些插件中体验到了这一点。或者,您可以使用'admin_init'

    function wpdocs_remove_menus(){
    
      remove_menu_page( 'some-plugin' );                  //Some Plugin Page
    
    }
    add_action( 'admin_init', 'wpdocs_remove_menus' );
    
  • 示例5

    本文档中的大多数示例都是错误的。
    钩子显然期望:
    应在admin_menu操作钩子上调用此函数。在其他地方调用它可能会导致问题:函数未定义,或者使用了全局$menu变量,但尚未声明此函数。

    因此,像这里的大多数示例一样,将其调用为admin_init,将抛出:
    Invalid argument supplied for foreach() in /wp-admin/includes/plugin.php on line 1754

    如果某些插件需要挂接admin_init,如示例中的一个状态,则该插件做错了,应该联系该插件,而不是被黑客攻击以匹配其错误的代码。