描述
用法示例:
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 | 开始引入 |
使用示例
您需要使用正确的钩子(这些钩子并不总是与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进行搜索,并删除正确的菜单页。
实例
删除所有用户的每个菜单。要仅删除某些菜单项,请仅包括要隐藏在函数中的菜单项。要仅删除某些用户的菜单,您可能需要使用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 );
基于之前的贡献,我开发了一个脚本来创建钩子函数,可以删除所有菜单。然后我可以选择显示哪些页面,评论或删除行。
您需要将其放入functions.php并加载wp-admin。然后将输出复制到functions.php并删除脚本。
add_action( 'admin_init', function () { echo "add_action( 'admin_init', function () {<br>"; foreach ( $GLOBALS['menu'] as $menu ) { echo " remove_menu_page( '$menu[2]' );<br>"; } echo "}, PHP_INT_MAX );"; exit(); } );
请注意
'admin_menu'
对于某些菜单可能不够。我在一些插件中体验到了这一点。或者,您可以使用'admin_init'
。function wpdocs_remove_menus(){ remove_menu_page( 'some-plugin' ); //Some Plugin Page } add_action( 'admin_init', 'wpdocs_remove_menus' );
本文档中的大多数示例都是错误的。
钩子显然期望:
应在admin_menu操作钩子上调用此函数。在其他地方调用它可能会导致问题:函数未定义,或者使用了全局$menu变量,但尚未声明此函数。因此,像这里的大多数示例一样,将其调用为
admin_init
,将抛出:Invalid argument supplied for foreach() in /wp-admin/includes/plugin.php on line 1754
如果某些插件需要挂接
admin_init
,如示例中的一个状态,则该插件做错了,应该联系该插件,而不是被黑客攻击以匹配其错误的代码。