REMOVE_MENU_PAGE在自定义插件菜单上不起作用

时间:2016-10-18 作者:Ethan O\'Sullivan

使用remove_menu_page() 该函数用于通过slug删除默认管理菜单项,如下所示:

add_action( \'admin_menu\', \'hide_menu\' );

function hide_menu() {
    remove_menu_page( \'index.php\' ); // Dashboard
    remove_menu_page( \'tools.php\' ); // Tools
}
当插件在仪表板中创建自己的菜单时,URL结构如下所示:

http://example.com/wp-admin/admin.php?page=plugin-slug
但是,当尝试删除自定义插件菜单项时,如下所示:

remove_menu_page( \'admin.php?page=plugin-slug\' );
没有任何变化。看看类似的问题herehere, 似乎自定义插件设置加载后,我的函数没有及时调用?然而,当我试图将优先级提高到更高的数字时,这仍然不起作用:

add_action( \'admin_menu\', \'hide_menu\', 9001, 1 );
是否有变通方法?我这样做对吗?

3 个回复
最合适的回答,由SO网友:Ethan O\'Sullivan 整理而成

感谢你的回答the_dramatist 发布后,这只是一个与admin_init 标签这些插件页面的slug可以由\\u剧作家提供的调试脚本检索,或者您可以在admin.php?page=plugin-slug:

add_action( \'admin_menu\', \'wpse_243070_hide_menu\' );

function wpse_243070_hide_menu() {
    remove_menu_page( \'index.php\' ); // Dashboard
    remove_menu_page( \'tools.php\' ); // Tools
    remove_menu_page( \'plugin-slug\' ); // Some plugin
    remove_menu_page( \'another_slug\' ); // Another plugin
}

SO网友:CodeMascot

将此临时代码放置在functions.php 或者任何可以执行的地方。

add_action( \'admin_init\', \'the_dramatist_debug_admin_menu\' );

function the_dramatist_debug_admin_menu() {

    echo \'<pre>\' . print_r( $GLOBALS[ \'menu\' ], TRUE) . \'</pre>\';
}
然后搜索plugin-slug. 在哪个数组中找到它复制[2] 值并将其放入remove_menu_page(\'the [2] value\') 把它挂在admin_init 如下所示-

add_action(\'admin_init\', \'\');
function the_dramatist_remove_menu(){
    remove_menu_page( \'the [2] value\' );
});
它会起作用的。并在其工作后删除临时代码块。

另一方面,您可以检查要删除的菜单页的插件代码,以及它们的add_menu_page() 函数取add_menu_page() 函数并将其放入remove_menu_page(\'fourth parameter\'). 它也会起作用。代码如下所示-

add_action(\'admin_init\', \'\');
function the_dramatist_remove_menu(){
    remove_menu_page( \'fourth parameter of add_menu_page()\' );
});

SO网友:Picard

对我来说,简单地取消菜单元素的设置被证明是最简单、最通用的方法,例如,通过这种方式,您可以删除所有菜单项,但只保留一些所需的菜单项,如:

add_filter(\'admin_menu\', \'wpse_243070_hide_menu_items\', 100);

function wpse_243070_hide_menu_items() {
  foreach ($GLOBALS[\'menu\'] as $mkey => $mval) {
    if (!in_array($mval[2], [
                  \'separator1\',
                  \'separator2\',
                  \'profile.php\',
                  \'edit.php?post_type=my_custom_post\'
        ])) {
      unset($GLOBALS[\'menu\'][$mkey]);
    }
  }
}

相关推荐