web-dev-qa-db-fra.com

Comment supprimer une metabox de la page de l'éditeur de menu?

Je ne sais pas si c'est très différent d'une page à l'autre, mais je me demande comment supprimer un metabox de la page de menu de l'apparence> sans devoir entrer dans les fichiers core de WordPress et le supprimer. Est-ce que je peux faire quelque chose pour le remplacer afin qu'il n'apparaisse pas à la fois sur la page et sur le menu d'options à l'écran?

3
user1632018

En inspectant le fichier /wp-admin/nav-menus.php, nous pouvons voir que ces méta-boîtes:

metaboxes

sont rendus avec:

<?php do_meta_boxes( 'nav-menus', 'side', null ); ?>

Le fichier /wp-admin/includes/nav-menu.php contient les appels add_meta_box() correspondants et à partir desquels nous pouvons construire le code de suppression approprié:

function custom_remove() {      
    remove_meta_box('nav-menu-theme-locations', 'nav-menus', 'side'); 
    remove_meta_box('add-custom-links', 'nav-menus', 'side'); 
    remove_meta_box('add-post', 'nav-menus', 'side'); 
    remove_meta_box('add-page', 'nav-menus', 'side'); 
    remove_meta_box('add-category', 'nav-menus', 'side'); 
}
add_action('admin_head-nav-menus.php', 'custom_remove');

où nous pouvons utiliser par exemple l'action admin_head-nav-menus.php puisqu'elle est appelée avant le rendu de ces méta-boîtes.

Si vous avez un type de message personnalisé (ou une taxonomie personnalisée), vous pouvez supprimer sa méta-boîte avec

   remove_meta_box( 'add-xxx' , 'nav-menus' , 'side' ); 

xxx est le nom correspondant.

Vous pouvez également consulter les fonctions wp_nav_menu_setup(), wp_nav_menu_post_type_meta_boxes() et wp_nav_menu_taxonomy_meta_boxes() pour voir comment les méta-boîtes sont ajoutées.

4
birgire
if (!is_admin()) return;

// See https://developer.wordpress.org/reference/functions/wp_nav_menu_taxonomy_meta_boxes/
// $taxonomy_object is of type WP_Post_Type

add_filter('nav_menu_meta_box_object', function ($taxonomy_object) {

if (in_array($taxonomy_object->name, ['page', 'post', 'category'] )) {
  return null;
}

return $taxonomy_object;
0
realtebo