web-dev-qa-db-fra.com

Supprimer un élément de menu créé par un plugin

J'essaie de supprimer un élément de menu et d'essayer plusieurs approches, mais je n'ai pas eu de chance. Il a été créé à partir d'un plugin FAQ.

Si j'utilise cette ligne:

remove_menu_page( 'edit.php?post_type=question' );

Cela supprimera le menu principal, cependant, je ne souhaite supprimer que deux éléments de sous-menu contenus dans cette adresse URL edit.php?post_type=question.

Pour l'élément que je veux supprimer, le chemin dans la barre d'adresse me donne les informations suivantes:
edit-tags.php?taxonomy=faq-topic&post_type=question
et
edit-tags.php?taxonomy=faq-tags&post_type=question

J'ai essayé plusieurs solutions, y compris remove_menu_page et remove_submenu_page, en vain.

Ce qui a échoué jusqu'à présent:

remove_submenu_page( 'edit.php?post_type=question', 'edit-tags.php?taxonomy=faq-topic&post_type=question');
remove_menu_page( 'edit-tags.php?taxonomy=faq-tags') ;
remove_menu_page( 'edit-tags.php?taxonomy=faq-tags&post_type=question') ;
remove_submenu_page( 'edit.php?post_type=question', 'edit-tags.php?taxonomy=faq-topic&post_type=question');
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-topic&post_type=question');
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-topic');
remove_submenu_page( 'edit.php', 'edit-tags.php');
5
John
function remove_submenu() {

    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-topic&post_type=question' );
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=faq-tags&post_type=question' );
}

add_action( 'admin_menu', 'remove_submenu', 999 );

Veuillez lire le Codex . remove_submenu_page() a besoin de deux paramètres et du bon crochet.

Et (très) _ _ important: Utilisez une priorité très très élevée dans votre crochet! Si vous utilisez une priorité basse, votre fonction sera exécutée avant que les menus ne soient ajoutés. Donc, il n'y a pas de menu à supprimer. Si vous utilisez une priorité élevée, il y a de fortes chances que votre fonction soit exécutée après les menus ont été ajoutés.

Cela pourrait être la partie la plus délicate.

METTRE À JOUR

Après avoir installé et inspecté le plugin, j'ai trouvé la solution. Il y a plusieurs problèmes et quelques points difficiles.

Les sous-menus sont non ajoutés avec add_submenu_page(), ils sont ajoutés avec un type de publication personnalisé. Une simple recherche par add_submenu_page(), copiez les slugs du menu et en supprimant les menus doivent échouer. Je dois chercher la limace cpt et l'utiliser.

Après global $submenu; var_dump( $submenu ); j'obtiens cette sortie

[more elements]
    'edit.php?post_type=question' => 
        array (size=7)
          5 => 
            array (size=3)
              0 => string 'FAQs' (length=4)
              1 => string 'edit_posts' (length=10)
              2 => string 'edit.php?post_type=question' (length=27)
          10 => 
            array (size=3)
              0 => string 'Neue FAQ' (length=8)
              1 => string 'edit_posts' (length=10)
              2 => string 'post-new.php?post_type=question' (length=31)
          15 => 
            array (size=3)
              0 => string 'FAQ Titel' (length=9)
              1 => string 'manage_categories' (length=17)
              2 => string 'edit-tags.php?taxonomy=faq-topic&post_type=question' (length=55)
          16 => 
            array (size=3)
              0 => string 'FAQ Tags' (length=8)
              1 => string 'manage_categories' (length=17)
              2 => string 'edit-tags.php?taxonomy=faq-tags&post_type=question' (length=54)
[ more elements ]

Maintenant, il était facile de supprimer les sous-menus avec edit.php?post_type=question comme slug de menu et edit-tags.php?taxonomy=faq-topic&post_type=question/edit-tags.php?taxonomy=faq-tags&post_type=question comme slug de sous-menu.

Si vous observez attentivement, l'esperluette (&) est une entité html. Il n'est pas possible simplement de copier la partie URL et de l'insérer. Donc, vous ne pouvez pas supprimer une page de sous-menu avec une URL non codée, elle doit être encodée avec une URL.

Et voici le code final:

add_action( 'admin_menu', 'remove_faq_subpages', 999 );

function remove_faq_subpages() {

    $ptype = 'question';
    remove_submenu_page( "edit.php?post_type={$ptype}", "edit-tags.php?taxonomy=faq-tags&post_type={$ptype}" );
    remove_submenu_page( "edit.php?post_type={$ptype}", "edit-tags.php?taxonomy=faq-topics&post_type={$ptype}" );

}
8
Ralf912