web-dev-qa-db-ja.com

ナビゲーションメニュー管理画面で使用できないメタボックスを削除する

wp-admin/nav-menus.phpにアクセスしてもメニューが表示されない場合は、使用できないメタボックスのセットが表示されます。彼らがする唯一のことは、メニュー作成ダイアログから注意を引くことです。

enter image description here

メニューがあるまでそれらのボックスを隠したい。

enter image description here

どうやってやるの?

4
fuxia

wp-admin/nav-menus.phpには2つの重要なグローバル変数があります。

  • $nav_menusは、 wp_get_nav_menus() で埋められた、利用可能なすべてのメニューの配列です。
  • $wp_meta_boxes['nav-menus']は、この画面で利用可能なすべてのメタボックスの配列です。

最初の変数が設定された後に呼び出されるadmin_head-nav-menus.phpにフックして、2番目の変数を変更することができます。

add_action( 'admin_head-nav-menus.php', 't5_hide_dead_menu_metaboxes' );

/**
 * Remove metaboxes for menu items when no menu exists.
 *
 * @wp-hook admin_head-nav-menus.php
 * @return  void
 */
function t5_hide_dead_menu_metaboxes()
{
    empty ( $GLOBALS['nav_menus'] )
        and $GLOBALS['wp_meta_boxes']['nav-menus'] = array ();
}

GitHubから プラグインとしてT5死んだメニューのメタボックスを隠す

追加情報:

メタボックスを削除した後、画面は少し変に見えます。少し初期のフックを変更し、見栄えを良くするためにいくつかのスタイルを追加することができます。だから私たちのフックは次のようになります。

/**
 * Remove metaboxes for menu items when no menu exists.
 *
 * @wp-hook admin_head-nav-menus.php
 * @return  void
 */
function t5_hide_dead_menu_metaboxes()
{
    if ( empty( $GLOBALS['nav_menus'] ) ) {
        $GLOBALS['wp_meta_boxes']['nav-menus'] = array ();
        echo '<style> #nav-menus-frame { margin-left: 0 !important; padding-top: 20px; } </style>';
    }
}

そうすると、画面はより自然に見えます。

enter image description here

4
fuxia