remove_menu_page no funciona en los menús de complementos personalizados

2

El uso de la función remove_menu_page() funciona para eliminar los elementos predeterminados del menú de administración por su slug así:

add_action( 'admin_menu', 'hide_menu' );

function hide_menu() {
    remove_menu_page( 'index.php' ); // Dashboard
    remove_menu_page( 'tools.php' ); // Tools
}

Cuando un complemento creó su propio menú en el Panel de control, la estructura de la URL se parece a la siguiente:

http://example.com/wp-admin/admin.php?page=plugin-slug

Sin embargo, cuando intente eliminar el elemento del menú del complemento personalizado de esta forma:

remove_menu_page( 'admin.php?page=plugin-slug' );

Nada cambia. Vea preguntas similares aquí y aquí , parece que no se llama a mi función a tiempo una vez que se cargan los ajustes personalizados del complemento. Sin embargo, cuando trato de aumentar la prioridad a un número más alto, todavía no funciona:

add_action( 'admin_menu', 'hide_menu', 9001, 1 );

¿Hay algún trabajo alrededor? ¿Estoy haciendo esto correctamente?

    
pregunta Ethan Jinks O'Sullivan 18.10.2016 - 06:43

2 respuestas

4

Gracias a la respuesta que publicó the_dramatist , era solo cuestión de enganchar a etiqueta admin_init . Los slugs para esas páginas de complementos pueden ser recuperados por el script de depuración que proporcionó the_dramatist, o simplemente puede mirar ese valor de consulta después de admin.php?page=plugin-slug :

add_action( 'admin_init', 'wpse_243070_hide_menu' );

function wpse_243070_hide_menu() {
    remove_menu_page( 'index.php' ); // Dashboard
    remove_menu_page( 'tools.php' ); // Tools
    remove_menu_page( 'plugin-slug' ); // Some plugin
    remove_menu_page( 'another_slug' ); // Another plugin
}
    
respondido por el Ethan Jinks O'Sullivan 18.10.2016 - 17:06
5

Coloque este código temporal debajo de su functions.php o en cualquier lugar donde se pueda ejecutar.

add_action( 'admin_init', 'the_dramatist_debug_admin_menu' );

function the_dramatist_debug_admin_menu() {

    echo '<pre>' . print_r( $GLOBALS[ 'menu' ], TRUE) . '</pre>';
}

Luego busque el plugin-slug . En qué matriz lo encuentra, copie el valor [2] y póngalo en remove_menu_page('the [2] value') y enlácelo a admin_init como a continuación-

add_action('admin_init', '');
function the_dramatist_remove_menu(){
    remove_menu_page( 'the [2] value' );
});

Y estará funcionando. Y después de que funcione, elimine el bloque de código temporal.

Por otro lado, puede inspeccionar el código del complemento que página de menú desea eliminar y en su función add_menu_page() tomar el cuarto parámetro de la función add_menu_page() y colocarlo dentro de remove_menu_page('fourth parameter') . Funcionará también. El código se verá a continuación-

add_action('admin_init', '');
function the_dramatist_remove_menu(){
    remove_menu_page( 'fourth parameter of add_menu_page()' );
});
    
respondido por el CodeMascot 18.10.2016 - 07:28

Lea otras preguntas en las etiquetas