2012-01-29 3 views
8

Я пытаюсь удалить несколько меню верхнего уровня на панели администратора Wordpress. Как ни странно, я получаю сообщение об ошибке из файла plugin.php, где объявлена ​​функция: «Недопустимый аргумент, предоставленный foreach() в C: \ wamp \ www \ wordpress-alut \ wp-admin \ includes \ plugin.php в строке 1261 ". я пошел в файл и нашел следующий код:Функция wordpress remove_menu_page() выдает ошибку

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

им нужно «.php» в конце? –

ответ

17

Вы звоните mf_remove_menu_pages() до того $menu фактически установлен, или, кажется, в тех случаях, когда $menu никогда не установить. Вам нужно дождаться крюка admin_menu, чтобы фактически позвонить remove_menu_page(). Если вы делаете это на admin_init, то вы используете неправильный крючок, и именно поэтому он работает на запросах AJAX.

Итак, вам нужно сменить свой крючок. Пожалуйста, попробуйте с этим:

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

Надеется, что это помогает :)

+0

да, это сработало! thx :) – Matanya

+0

Thx u очень много, спасли меня слишком много времени –

+0

@sabari вы гений, он работал как шарм: –

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 Codex и на Wordpress Support Forums.

Смежные вопросы