web-dev-qa-db-fra.com

remove_menu_page ne fonctionne pas sur les menus de plugins personnalisés

Utiliser la fonction remove_menu_page() fonctionne pour supprimer les éléments de menu par défaut de l'administrateur par leur slug, comme ceci:

add_action( 'admin_menu', 'hide_menu' );

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

Lorsqu'un plugin crée son propre menu dans le tableau de bord, la structure de l'URL se présente comme suit:

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

Cependant, lorsque vous essayez de supprimer l'élément de menu du plug-in personnalisé, procédez comme suit:

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

Rien ne change. En regardant des questions similaires ici et ici , il semble que ma fonction ne soit pas appelée à temps une fois les paramètres du plugin personnalisé chargés? Pourtant, lorsque j'essaie d'augmenter la priorité à un nombre plus élevé, cela ne fonctionne toujours pas:

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

Y at-il un travail autour? Est-ce que je le fais correctement?

3

Grâce à la réponse que the_dramatist a postée, il s’agissait simplement de s’accrocher à la balise admin_init . Les slugs de ces pages de plug-in peuvent être récupérés par le script de débogage fourni par the_dramatist, ou vous pouvez simplement regarder la valeur de la requête après 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
}
4

Placez ce code temporaire ci-dessous dans votre functions.php ou dans tout autre endroit pouvant être exécuté.

add_action( 'admin_init', 'the_dramatist_debug_admin_menu' );

function the_dramatist_debug_admin_menu() {

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

Ensuite, recherchez le plugin-slug. Dans quel tableau vous le trouvez, copiez la valeur [2] et mettez-la dans remove_menu_page('the [2] value') et raccordez-la à admin_init comme ci-dessous -

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

Et ça va marcher. Et après cela fonctionne supprimer le bloc de code temporaire.

D'autre part, vous pouvez inspecter le code du plugin dans la page de menu que vous voulez supprimer et, dans leur fonction add_menu_page(), prenez le quatrième paramètre de la fonction add_menu_page() et mettez-le à l'intérieur de remove_menu_page('fourth parameter'). Cela fonctionnera aussi bien. Le code ressemblera à ce qui suit

add_action('admin_init', '');
function the_dramatist_remove_menu(){
    remove_menu_page( 'fourth parameter of add_menu_page()' );
});
6
CodeMascot