función de wordpress remove_menu_page() arroja un error

3 minutos de lectura

avatar de usuario
Matanya

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, que dice:
“Argumento no válido suministrado 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:

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 tener en cuenta que cuando uso remove_submenú_page(), que es la siguiente función en plugin.php, no aparece ese error. mi función, ubicada 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');
}; 

  • ¿Necesitan? .php ¿al final?

    – Nick Shvelidze

    29 de enero de 2012 a las 10:34

avatar de usuario
sabari

estas llamando mf_remove_menu_pages() antes de $menu está realmente configurado, o parece en los casos en que $menu nunca se configura. Tienes que esperar a que admin_menu enganchar para poder llamar remove_menu_page(). Si lo estás haciendo en admin_initentonces estás usando el enlace incorrecto, y es por eso que está funcionando en las solicitudes de AJAX

Así que necesitas cambiar tu 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 🙂

  • Muchas gracias, me ahorró demasiado tiempo.

    usuario1466291

    24/03/2013 a las 18:40

En las versiones más nuevas de WordPress, para eliminar algunas subpáginas como theme-editor.php (o subpáginas introducidas por el complemento Jetpack) debe enlazar con el admin_menu gancho con una prioridad muy alta.

por ejemplo, para eliminar theme-editor.php necesita establecer una prioridad de aproximadamente 120. Para las páginas de Jetpack, necesita algo alrededor 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 el Códice de WordPress y en el Foros de soporte de WordPress.

¿Ha sido útil esta solución?