2012-01-29 11 views
8

Sto tentando di rimuovere alcuni menu di primo livello sul pannello di amministrazione di wordpress. Stranamente ricevo un messaggio di errore dal file plugin.php, dove viene dichiarata la funzione, dicendo: "Argomento non valido fornito per foreach() in C: \ wamp \ www \ wordpress-alut \ wp-admin \ includes \ plugin.php on line 1261 ". sono andato al file e ha trovato il seguente codice:wordpress function remove_menu_page() genera un errore

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

E 'importante notare che quando uso remove_ sottomenu _page(), che è la prossima funzione plugin.php, ottengo tale errore. mia funzione, che si trova in 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

hanno bisogno di '.php' alla fine? –

risposta

17

si sta chiamando prima di mf_remove_menu_pages()$menu è in realtà costituito, o sembra nei casi in cui non è mai $menu istituito. È necessario attendere il gancio admin_menu per chiamare effettivamente lo remove_menu_page(). Se lo stai facendo su admin_init, allora stai usando il gancio sbagliato, ed è per questo che sta puntando su richieste AJAX

Quindi devi cambiare il tuo gancio. Si prega di provare con questo:

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

Spero che questo aiuti :)

+0

sì, ha funzionato! thx :) – Matanya

+0

Grazie mille, mi hai salvato troppo tempo –

+0

@sabari sei un genio, ha funzionato come un fascino: –

0

Nelle versioni più recenti di WordPress, per rimuovere alcune sottopagine come theme-editor.php (o sottopagine introdotta dal plugin Jetpack) bisogna legarsi al gancio admin_menu con una priorità molto alta.

E.g. per rimuovere theme-editor.php è necessario impostare una priorità di circa 120. Per le pagine Jetpack, è necessario qualcosa intorno a 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'); 
} 

Questo è incollata anche sul Wordpress Codex e al Wordpress Support Forums.

Problemi correlati