wordpress function remove_menu_page() throws an error wordpress function remove_menu_page() throws an error wordpress wordpress

wordpress function remove_menu_page() throws an error


You're calling mf_remove_menu_pages() before $menu is actually set up, or it seems in cases when $menu is never set up. You need to wait for the admin_menu hook in order to actually call remove_menu_page(). If you're doing it on admin_init, then you're using the wrong hook, and that's why it's borking on AJAX requests

So you need to change your hook. Please try with this:

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

Hope this helps :)


In newer versions of WordPress, to remove some subpages like theme-editor.php (or subpages introduced by the Jetpack plugin) you have to bind to the admin_menu hook with a very high priority.

E.g. to remove theme-editor.php you need to set a priority of about 120. For Jetpack pages, you need somthing around 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');}

This is also stated in the Wordpress Codex and at the Wordpress Support Forums.