web-dev-qa-db-ja.com

Functions.phpを使ってサブメニュー項目を管理メニューのメインリンクにする

私はクライアントの作業を容易にするためにfunctions.phpファイルを使って管理領域をカスタマイズしようとしています。私が以前に持っていたそして達成することができることを望んでいる1つの要求はメインメニューにいくつかのサブメニューを動かすことです。

たとえば、外観のサブメニューではなく、メインナビゲーションにウィジェットとメニューを表示するようにします。それから私はまとめて[外観]タブを削除することになります。

タブを削除できましたが、ウィジェットとメニュー用の新しいボタンを作成できませんでした。たとえ私が技術的にそれらを移動させるのではなく、代わりに新しいボタンを作成してリンクを自分で設定することの助けを得ることができるとしても(例えばMenus - > /nav-menus.phpのために).

それは可能ですか?

ありがとう

3
Adam

それはちょっと面倒ですが、うまくいきます。見てください

function remove_submenus() {
  global $submenu;
  unset($submenu['themes.php'][10]); // Removes Menu  
}
add_action('admin_menu', 'remove_submenus');



function new_nav_menu () {
    global $menu;
    $menu[99] = array('', 'read', 'separator', '', 'menu-top menu-nav');
    add_menu_page(__('Nav Menus', 'mav-menus'), __('Nav Menus', 'nav-menus'), 'edit_themes', 'nav-menus.php', '', 99);
}
add_action('admin_menu', 'new_nav_menu');

基本的には、Appearanceサブパネルからナビゲーションメニューの設定を削除し、それをトップレベルページとして再追加します(プラグインと同様)。そこにアイコンのURLを設定することもできます。望みどおりに動かないのはポジショニングだけです。

3
Norcross

OPのように、メニューとウィジェットを外観からトップレベルに移動するだけの場合は、さらに簡単です。それが私も必要なことです。

WPコアメニュー項目を移動するだけなので、メニュー項目を元に戻すためにadd_menu_pageを使用する必要はありません。新しいメニュー項目は追加しません。 $ submenu配列からそれらを設定解除し、$ menu配列の他の場所でそれらを再設定するだけです。

function re_sort_menu() {
  global $menu;
  global $submenu;
  // Note: find the position of every submenu in Appearance by uncommenting the following: 
  // print_r($submenu['themes.php'];
  unset($submenu['themes.php'][10]); // Unsets Appearance -> Menu (position 10)
  unset($submenu['themes.php'][7]); // Unsets Appearance -> Widgets

  // Add Menu and Widgets back at top level with some dashicons
  // Be careful not to give menu positions (array keys) that conflict with other menu items
  // TIP: print_r($menu); to see existing menu positions and also to check out the proper order of these array values. WP docu seems to list them in the incorrect order.
  $menu[31] = array( __( 'Menus', 'theme-slug' ), 'edit_themes', 'nav-menus.php', __( 'Menus', 'theme-slug' ), 'menu-top menu-nav', 'menu-nav', 'dashicons-menu');  
  $menu[32] = array( __( 'Widgets', 'theme-slug' ), 'edit_themes', 'widgets.php', __( 'Widgets', 'theme-slug' ), 'menu-top menu-nav', 'menu-nav', 'dashicons-admin-generic');  
}
add_action( 'admin_menu', 're_sort_menu' );

上記のNorcrossの答えは私を正しい軌道に乗せました、しかし何らかの理由でadd_menu_itemを使ってもWP 4.1で私の管理者のトップレベルメニュー項目として働く "Nav Menu"セクションを再生成しませんでした。問題はその関数に渡される配列値の順序にある​​ように見えましたが、私が物事を並べ替えたとしても、新しい WP Developer APIの記事から直接作業していました

0
nimmolo

これに関するよい記事、これを手助けすることができる古いリンク、 http://wpengineer.com/475/top-level-menu-in-wordpress-27/ /

また、@ Norcrossが提案している解決策はうまく機能しますが、アイコン99はエラーをスローします。例えば、空白のままにすることができます。 99ではなく''basename(__FILE__)とファイル名を使用して独自のカスタムアイコンを作成することもできます。

0

Wordpress 4.4に関しては、私はそれを動かすために次のコードを使わなければなりません:

function adjust_admin_menu() {
  global $menu;

  remove_submenu_page( 'themes.php', 'nav-menus.php' );

  // Add nav menu as top element
  $menu[31] = array( __( 'Menus', 'theme-slug' ), 'edit_theme_options', 'nav-menus.php', __( 'Menus', 'theme-slug' ), 'menu-top menu-nav', 'menu-nav', 'dashicons-menu');  
}
add_action( 'admin_menu', 'adjust_admin_menu' );
0
jmarceli

Menu_orderフィルタを使用して順序を変更できます。

function custom_menu_order($menu_ord) {  
if (!$menu_ord) return true;  

return array(  
    'index.php', // Dashboard  
    'edit.php', // Posts 
    'upload.php', // Media
    'edit.php?post_type=page', // Pages
    'edit-comments.php', // Comments 
    'link-manager.php', // Links 
    'separator1', // First separator  
    'nav-menus.php', // Navigation
    'separator2', // Second separator  
    'themes.php', // Appearance  
    'plugins.php', // Plugins  
    'users.php', // Users  
    'tools.php', // Tools  
    'options-general.php', // Settings  
    'separator-last', // Last separator  
);
}  
add_filter('custom_menu_order', 'custom_menu_order'); // Activate custom_menu_order  
add_filter('menu_order', 'custom_menu_order');

これはこの記事からここで取られました: あなたのwordpress管理者をカスタマイズする

Nav-menu.phpがトップレベルメニューに追加されていることに注目してください。各メニュー項目を再配置するには、それらを並べ替えるだけです。

0
Steven