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
是否有一个也可以隐藏这些菜单页面?
#1 楼
您需要使用正确的钩子(它们并不总是与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
。评论
显示如何转储菜单并找到用于remove_menu_page()的方法是一个巨大的帮助-教会我如何钓鱼,而不仅仅是把鱼交给我!
–马修·克拉克(Matthew Clark)
16年6月20日在19:34
对于acf,有更好的方法,请参阅文档
–hitautodestruct
17年2月12日在10:55
调试代码有很大的帮助。多谢分享!
–德夫纳
19年7月14日在17:14
#2 楼
您可能需要将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/
评论
隐藏的removeform7通过使用remove_menu_page('wpcf7')为我工作
–阿贝尔·梅尔奎德斯·卡雷霍
16年6月8日在8:29
#3 楼
// 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;
键将为您提供数组值允许您使用wordpress全局变量来完成所有这些操作(尽管不推荐)。
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
#4 楼
更新我创建了一个代码片段,它具有更强大的功能,可以处理主菜单和子菜单项。
原始答案
指定要删除的菜单,然后指定要保留的菜单:)
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]);
}
}
这样,您不必搜索插件名称并修改添加新插件时的代码。.
评论
正是我想要的!另外,您的代码段似乎很棒!非常感谢您添加解决方案。赞赏!
–德夫纳
19年7月14日在16:45
#5 楼
您需要找到正确的$ menu_slug。以下代码为我工作:add_action( 'admin_init', 'remove_menus' );
function remove_menus(){
remove_menu_page( 'wpcf7' );
}
#6 楼
当然,您只能指定要删除的项目。请看下面的代码:/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。
PS:
'menu_item_1 / n'->将鼠标悬停在菜单项上,然后获取链接中显示的菜单项的确切页面。
#7 楼
使用此代码段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♦
18年2月14日在17:10
评论
可能是愚蠢的问题,但是当您可以停用有问题的插件时,为什么要破解管理菜单?@ eyoung100有几个原因。最明显的方法是对特定用户(角色)隐藏某些功能。另外,可能需要重组管理菜单,因此需要删除(并再次添加)某些菜单项。
如果要通过编码使用解决方案,则插件是上下文中的帮助者,例如插件“ Adminimize”。如果插件的设置不是您的要求,则插件列表还需要通过自定义代码删除该插件。