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

时间:2012-01-29 10:17:46

标签: php wordpress menu

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

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;
}

重要的是要注意,当我使用remove_ 子菜单 _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');
}; 

2 个答案:

答案 0 :(得分:20)

您在实际设置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');
}

希望这会有所帮助:)

答案 1 :(得分:0)

在较新版本的WordPress中,要删除一些子页面,例如theme-editor.php(或Jetpack插件引入的子页面),您必须以非常高的优先级绑定到admin_menu挂钩。

E.g。要删除theme-editor.php,您需要设置大约120的优先级。对于Jetpack页面,您需要2000左右。

add_action( 'admin_menu', 'mf_remove_menu_pages', 120 );
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');
}

这也在Wordpress CodexWordpress Support Forums中说明。