向WP Admin添加自定义顶级外部和自定义子菜单外部链接

时间:2017-08-31 18:49:21

标签: wordpress wordpress-theming

我希望能够以此格式在Wordpress管理区域中添加新的管理菜单部分,但使用外部链接:

Top Level
  - item 1
  - item 2
  - item 3

然而,add_menu_page()和add_submenu_page()函数似乎只允许将菜单项添加到现有的帖子类型或页面。使用所有外部链接实现菜单的最简单方法是什么?非常感谢。

1 个答案:

答案 0 :(得分:2)

您无法使用add_menu_page()add_submenu_page()直接添加外部链接,但您可以操纵全局$menu$submenu变量来实现这(无论如何都是WP 4.8.1)

<强> 1。添加外部链接作为顶级菜单

如果您想将外部链接添加为单个顶级菜单,可以按以下步骤操作:

add_action( 'admin_menu', 'admin_menu_add_external_link_top_level' );

function admin_menu_add_external_link_top_level() {
    global $menu;

    $menu_slug = "external_slug"; // just a placeholder for when we call add_menu_page
    $menu_pos = 1; // whatever position you want your menu to appear

    // create the top level menu, using $menu_slug as a placeholder for the link
    add_menu_page( 'admin_menu_add_external_link_top_level', 'External Link', 'read', $menu_slug, '', 'icon', $menu_pos );

    // replace the slug with your external url
    $menu[$menu_pos][2] = "http://www.example.com";
}

参考:Adding an Arbitrary Link to the Admin Menu?

这里要注意的主要事项是你需要为&#34; slug&#34;传递一个占位符值。进入add_menu_page,然后您将使用外部网址替换。 如果您尝试将url作为slug传递,Wordpress会将其附加到网站域,例如http://yourdomain.com/www.example.com

<强> 2。添加包含外部链接子菜单的顶级菜单

添加一个普通的顶级菜单,其中包含一个包含外部链接的子菜单,如下所示:

add_action('admin_menu', 'admin_menu_add_external_links_as_submenu');

function admin_menu_add_external_links_as_submenu() {
    global $submenu;

    $menu_slug = "externallink"; // used as "key" in menus
    $menu_pos = 1; // whatever position you want your menu to appear

    // create the top level menu
    add_menu_page( 'external_link', 'External Links', 'read', $menu_slug, '', '', $menu_pos);

    // add the external links to the slug you used when adding the top level menu
    $submenu[$menu_slug][] = array('Example', 'manage_options', 'http://www.example.com/');
    $submenu[$menu_slug][] = array('Google', 'manage_options', 'https://www.google.com/');
}

参考:how to add custom link on wordpress admin sidebar

在此示例中,我们使用add_menu_page正常设置顶级域。但是,我们需要直接操作add_submenu_page全局变量来添加外部网址,而不是使用$submenu作为子菜单。

第3。添加带有外部链接外部链接子菜单的顶级菜单

虽然不完全清楚,但我认为你想要添加一个外部链接的顶级菜单,还有一个外部链接的子菜单?

我不确定你为什么要这样做,但如果你这样做,你可以按照以下方式将上述内容结合起来实现这一目标:

add_action( 'admin_menu', 'admin_menu_add_external_link_top_submenu' );

function admin_menu_add_external_link_top_submenu() {
    global $menu;
    global $submenu;

    $menu_slug = "http://www.example.com"; // url for the top-level option
    $menu_pos = 1; // whatever position you want your menu to appear

    // create the top level menu, using $menu_slug as a placeholder for the link
    add_menu_page( 'admin_menu_add_external_link_top_level', 'External Links', 'read', 'my_slug', '', 'icon', $menu_pos );

    // replace the slug with your external url
   $menu[$menu_pos][2] = $myslug;

    // add your submenu of external links
    // add the links to the "slug" for your top-level menu (which is now your external url)
    $submenu[$menu_slug][] = array('Example', 'manage_options', 'http://www.example.com/');
    $submenu[$menu_slug][] = array('Google', 'manage_options', 'https://www.google.com/');
}

参考:只是我和一些试验&amp;错误:)

此示例是选项1和2中代码的组合:使用add_menu_page设置顶级菜单;用您的外部网址替换slug,最后使用add_submenu_page直接添加子菜单链接。