web-dev-qa-db-ja.com

メニューエディタのページからメタボックスを削除するにはどうすればいいですか?

それがどのページでも大きく異なるかどうかはわかりませんが、Wordpressのコアファイルに移動して削除する必要なしに、外観>メニューページからメタボックスを削除する方法を考えています。上書きしてページと画面オプションメニューの両方に表示されないようにするためにできることはありますか。

3
user1632018

ファイル/wp-admin/nav-menus.phpを調べると、これらのメタボックスがわかります。

metaboxes

でレンダリングされます:

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

ファイル/wp-admin/includes/nav-menu.phpには、対応するadd_meta_box()呼び出しが含まれており、そこから関連する削除コードを構築できます。

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');

これらのメタボックスがレンダリングされる前に呼び出されるので、たとえばadmin_head-nav-menus.phpアクションを使用できます。

カスタム投稿タイプ(またはカスタム分類法)がある場合は、次のようにしてメタボックスを削除できます。

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

xxxは対応する名前です。

メタボックスがどのように追加されているかを見るために、関数wp_nav_menu_setup()wp_nav_menu_post_type_meta_boxes()およびwp_nav_menu_taxonomy_meta_boxes()をさらに調べることができます。

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