2012-01-29 23 views
8

Estoy tratando de eliminar algunos menús de nivel superior en el panel de administración de WordPress. Por extraño que parezca, recibo un mensaje de error del archivo plugin.php, donde se declara la función, diciendo: "Se ha proporcionado un argumento inválido para foreach() en C: \ wamp \ www \ wordpress-alut \ wp-admin \ includes \ plugin.php en la línea 1261 ". Fui al archivo y encontró el siguiente código:función de wordpress remove_menu_page() arroja un error

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

Es importante señalar que cuando uso remove_ submenú _page(), que es la siguiente función en plugin.php, No me sale tales error. mi función, situada en 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

¿necesitan '.php' al final? –

Respuesta

17

Estás llamando mf_remove_menu_pages() antes $menu se establece en realidad, o parece que en los casos en que $menu no esté configurado. Debe esperar el gancho admin_menu para llamar realmente al remove_menu_page(). Si lo está haciendo en admin_init, entonces está utilizando el gancho incorrecto, y es por eso que está borking en las solicitudes AJAX

Así que debe cambiar su gancho. Por favor, intente con esto:

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

Espero que esto ayude :)

+0

sí, funcionó! thx :) – Matanya

+0

Thx u muchísimo, me salvó demasiado tiempo –

+0

@sabari eres genial, funcionó como el encanto: –

0

En las nuevas versiones de WordPress, para eliminar algunas páginas secundarias como theme-editor.php (o sub-páginas presentado por el plugin Jetpack) que tiene que enlazar con el gancho admin_menu con una prioridad muy alta.

E.g. para eliminar theme-editor.php debe establecer una prioridad de aproximadamente 120. Para las páginas de Jetpack, necesita algo cerca de 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'); 
} 

Esto también se afirma en la Wordpress Codex y al Wordpress Support Forums.

Cuestiones relacionadas