remove_menu_page não funciona em menus de plug-in personalizados

2

Usar a função remove_menu_page() funciona para remover os itens de menu padrão do administrador pela forma como eles são:

add_action( 'admin_menu', 'hide_menu' );

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

Quando um plug-in cria seu próprio menu no Painel, a estrutura da URL é semelhante à seguinte:

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

No entanto, ao tentar remover o item de menu do plug-in personalizado da seguinte forma:

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

Nada muda. Olhando para perguntas semelhantes aqui e aqui , parece que minha função não é chamada a tempo depois que as configurações do plugin personalizado são carregadas? No entanto, quando tento aumentar a prioridade para um número maior, isso ainda não funciona:

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

Existe algum trabalho? Estou fazendo isso corretamente?

    
por Ethan Jinks O'Sullivan 18.10.2016 / 06:43

2 respostas

4

Graças à resposta que o the_dramatist postou, foi uma questão de apenas ligar para o admin_init tag. Os slugs para essas páginas de plugins podem ser recuperados pelo script de depuração fornecido pelo the_dramatist, ou você pode simplesmente olhar para o valor da consulta depois 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
}
    
por Ethan Jinks O'Sullivan 18.10.2016 / 17:06
5

Coloque este código temporário abaixo em functions.php ou em qualquer local que possa ser executado.

add_action( 'admin_init', 'the_dramatist_debug_admin_menu' );

function the_dramatist_debug_admin_menu() {

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

Em seguida, pesquise o plugin-slug . Em que matriz você encontra copie o valor [2] e coloque-o em remove_menu_page('the [2] value') e conecte-o a admin_init como abaixo -

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

E estará funcionando. E depois que ele estiver funcionando, remova o bloco de código temporário.

Por outro lado, você pode inspecionar o código do plug-in que página de menu você deseja remover e, na função add_menu_page() , usar o quarto parâmetro da função add_menu_page() e colocá-lo em remove_menu_page('fourth parameter') . Vai funcionar também. O código será parecido com abaixo -

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

Tags