wordpress函数remove_menu_page()抛出一个错误

Mat*_*nya 9 php wordpress menu

我想删除wordpress管理面板上的一些顶级菜单.奇怪的是,我从plugin.php文件中获取了一条错误消息,其中声明了该函数,说: "在C:\ wamp\www\wordpress-alut\wp-admin\includes\plugin中为foreach()提供的参数无效. php在1261行".我去了文件,发现以下代码:

function remove_menu_page( $menu_slug ) {
    global $menu;

    foreach ( $menu as $i => $item ) { // **this is line 1261**
        if ( $menu_slug == $item[2] ) {
            unset( $menu[$i] );
            return $item;
        }
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

重要的是要注意,当我使用remove_ submenu _page(),这是plugin.php中的下一个函数时,我没有得到这样的错误.我的函数,位于functions.php中:

add_action( 'admin_init', 'mf_remove_menu_pages' );
function mf_remove_menu_pages() {
    remove_menu_page('link-manager.php');
    remove_menu_page('index.php');
    remove_menu_page('users.php');
    remove_menu_page('upload.php');
    remove_menu_page('tools.php');
    remove_menu_page('edit.php');
    remove_menu_page('edit-comments.php');
    remove_menu_page('post-new.php');
    remove_submenu_page('themes.php','themes.php');
    remove_submenu_page('themes.php','theme-editor.php');
    remove_submenu_page('themes.php','widgets.php');
}; 
Run Code Online (Sandbox Code Playgroud)

Sab*_*ari 21

mf_remove_menu_pages()之前正在调用$menu实际设置,或者似乎在$menu从未设置过的情况下.您需要等待admin_menu挂钩才能实际呼叫remove_menu_page().如果你正在使用它admin_init,那么你正在使用错误的钩子,这就是为什么它在AJAX请求上的borking

所以你需要改变你的钩子.请试试这个:

add_action( 'admin_menu', 'mf_remove_menu_pages' );
function mf_remove_menu_pages() {
   remove_menu_page('link-manager.php');
   remove_menu_page('index.php');
   remove_menu_page('users.php');
   remove_menu_page('upload.php');
   remove_menu_page('tools.php');
   remove_menu_page('edit.php');
   remove_menu_page('edit-comments.php');
   remove_menu_page('post-new.php');
   remove_submenu_page('themes.php','themes.php');
   remove_submenu_page('themes.php','theme-editor.php');
   remove_submenu_page('themes.php','widgets.php');
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :)