使用functions.php使子菜单项成为管理菜单中的主链接

时间:2011-02-13 作者:Adam

我正在尝试使用这些函数自定义管理区域。php文件,使我的客户更容易处理。我之前收到的一个请求是将一些子菜单移到主导航中,希望能够完成。

例如,我想让小部件和菜单出现在主导航中,而不是作为外观的子菜单。然后,我将一起删除“外观”选项卡。

我已经能够删除选项卡,但无法为小部件和菜单创建新按钮。即使我可以得到帮助,而不是从技术上移动它们,而是创建一个新按钮并自己设置链接(例如,对于菜单->/nav Menus.php)。

这有可能吗?

谢谢

6 个回复
最合适的回答,由SO网友:Norcross 整理而成

好吧,虽然有点乱,但还是行得通的。看一看

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\');
本质上,它是从外观子面板中删除导航菜单设置,然后将其重新添加为顶级页面(类似于插件)。您也可以在其中设置图标URL。我唯一不能按我想要的方式工作的部分是定位。

SO网友:jmarceli

至于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\' );

SO网友:Drew Dello Stritto

这是一篇很好的文章,有助于解决这个问题的旧链接,http://wpengineer.com/475/top-level-menu-in-wordpress-27/

此外,@Norcross提出的解决方案也很有效,但图标99会抛出一个错误,您可以将其留空,例如。\'\' 而不是99。您还可以使用basename(__FILE__) 和文件名。

SO网友:Steven

您可以使用menu\\u order filter更改顺序:

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\');
此处摘自本文:customizing your wordpress admin

请注意nav菜单。php已添加到顶级菜单。要重新定位每个菜单项,只需重新排列它们。

SO网友:nimmolo

如果像OP一样,您只想将菜单和小部件从外观移到顶层,那就更简单了。这也是我所需要的。

因为我们只是移动WP核心菜单项,所以不需要使用add_menu_page 要重新添加菜单项,我们不会添加任何新菜单项。只需从$子菜单数组中取消设置它们,然后在$菜单数组的其他位置重新设置它们。

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\' );
上面诺克罗斯的回答让我走上了正确的道路,但不管出于什么原因add_menu_item 在WP 4.1中,没有将正在工作的“Nav Menu”部分重新生成为“admin for me”中的顶级菜单项。问题似乎在于传递给该函数的数组值的顺序,但无论我如何重新排序,都会直接从新WP Developer API article, 我从来没有让它工作过。

SO网友:NS frontend-gmbh.de

add_action( \'admin_menu\', \'dashboard_remove_menu_pages\' );
function dashboard_remove_menu_pages() {
     remove_submenu_page( \'themes.php\', \'nav-menus.php\' );
     add_menu_page(\'Menu\', \'Menu\', \'edit_themes\', \'nav-menus.php\', \'\' , \'dashicons-menu\', 3);
        }
这应该行得通。还有定位。在这种情况下,菜单位置:3。只需遵守wordpress struktur:

add_menu_page( string $page_title, string $menu_title, string $capability, string $menu_slug, callable $function = \'\', string $icon_url = \'\', int $position = null )

结束