向管理菜单添加任意链接?

时间:2010-08-30 作者:Tom

有没有办法将任意超链接添加到WordPress管理菜单(我是指登录管理仪表板时左侧的菜单)?例如,可以添加到Google的链接吗?

在我的特殊情况下,我想为我正在处理的Wordpress主题添加一个styleguide页面,以便向用户展示如何使用主题设置不同的HTML元素的样式,并演示如何很好地设置各种内容的样式。

这是我到目前为止在函数中得到的代码(注意:它不完整)。php我在外观部分添加了一个新菜单项:

add_action(\'admin_menu\', \'create_theme_style_page\');

function create_theme_style_page() {
  add_theme_page(\'Theme Styleguide\', \'Theme Styleguide\', \'administrator\', basename(__FILE__),\'build_styleguide_page\');
}

function build_styleguide_page() {
 echo "Not sure what goes here to redirect admin to a arbitrary url?";
}
在中build_styleguide_page(), 正在尝试重定向header() 给出错误(无法修改标题信息)。

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

你好@Tom,

如果我正确理解了你的问题,你就不需要知道如何在菜单中添加链接(似乎你已经知道了),而是需要学习如何让链接正确重定向,对吗?

从管理菜单项重定向到外部URL如果是这样,您需要做的是不要使用菜单项功能,而是尽早使用“hook”WordPress,这样它就不会输出任何内容,除了可能的HTTP头。呼叫时最早的钩子/wp-admin/themes.php 似乎是after_setup_theme 而且似乎效果很好。

使用“Menu-Slug”,这样您就可以在钩子中测试它,但要使其正常工作,我们首先需要修改您的调用add_theme_pageadmin_menu 挂钩/您的create_theme_style_page() 作用我们删除了第五个参数(调用以实现admin选项的函数),因为我们不需要它,并将第四个参数(menu slug)更改为themes.php?goto=build-styleguide-page.

虽然我们几乎可以为第四个参数选择任何内容,但考虑到我们将重定向我路由到同一个页面(themes.php) 作为一致性的其他外观选项。我也随便想到了这个名字goto 因为WordPress不使用它,这似乎是有意义的。

add_action(\'admin_menu\', \'create_theme_style_page\');
function create_theme_style_page() {
  add_theme_page(
    \'Theme Styleguide\',
    \'Theme Styleguide\',
    \'administrator\',
    \'themes.php?goto=build-styleguide-page\'
  );
}
顺便说一句,我们把你的build_styleguide_page() 函数,因为此解决方案不需要它。

在最早的挂钩中重定向themes.php: after_setup_theme

作为最后一段代码,我们实现了after_setup_theme 在我们的redirect_from_admin_menu() 作用我们进行了测试,以查看当前页面是否themes.php 并确保URL参数为goto 已在URL上传递。然后测试goto 使用switch/case 语句,以查看其值是否为\'build-styleguide-page\'; 如果是这样的话,它会重定向到您所说的假设,例如Google,否则我们只会重定向回admin dashboard:

add_action(\'after_setup_theme\', \'redirect_from_admin_menu\');
function redirect_from_admin_menu($value) {
  global $pagenow;
  if ($pagenow==\'themes.php\' && !empty($_GET[\'goto\'])) {
    switch ($_GET[\'goto\']) {
      case \'build-styleguide-page\':
        wp_redirect("http://www.google.com");
        break;
      default:
        wp_safe_redirect(\'/wp-admin/\');
        break;
    }
    exit;
  }
}

Notes:

<我选择使用switch/case 中的声明after_setup_theme 挂钩/redirect_from_admin_menu() 功能,以便更容易添加其他goto 如果需要,重定向;只需添加更多case语句。

wp_redirect()wp_safe_redirect() 函数实际上不会终止;您需要显式发出exit语句以使WordPress停止,而不是覆盖重定向。

希望这有帮助!

SO网友:t31os

如果通过将项目添加到$submenu 直接数组您将避免进行重定向,并且能够使用完整的场外URL作为菜单链接(我自己做)。

add_action( \'admin_menu\' , \'admin_menu_new_items\' );
function admin_menu_new_items() {
    global $submenu;
    $submenu[\'index.php\'][500] = array( \'Menu item name\', \'manage_options\' , \'http://example.com\' ); 
}  
index.php 表示父菜单的键/链接,因此在示例中,我基本上是向Dashboard 菜单

当然,它没有使用add_{type}_page 功能,但它确实解决了WordPress阻止管理菜单链接中的场外URL这一事实。。

我使用类似的方法将各种虚拟主机添加到菜单中,这样我就可以直接从管理菜单切换到其他安装(都是通过脚本完成的,但基本上使用了上述代码的美化版本)。

NOTE: 如果决定使用该代码,请注意不要分配正在使用的键(示例代码中的500数组键)。

TIP: 实际上,您可以在菜单键中使用负值,因此您可以强制菜单项位于任何本机WordPress项之前。

SO网友:Bobz

我在这方面也取得了同样的成就:

function add_custom_menu_item(){
    add_menu_page( \'Menu Item Title\', \'Page Title\', \'manage_options\', \'page_slug\', \'function\', \'dashicons-icon\', 1 );
}
add_action( \'admin_menu\', \'add_custom_menu_item\' );

function custom_menu_item_redirect() {

    $menu_redirect = isset($_GET[\'page\']) ? $_GET[\'page\'] : false;

    if($menu_redirect == \'page_slug\' ) {
        wp_safe_redirect( home_url(\'/my-page\') );
        exit();
    }

}
add_action( \'admin_init\', \'custom_menu_item_redirect\', 1 );
这里要做的是添加菜单项并定义slug,然后在“admin\\u init”上检查slug是否存在并重定向到所需的位置。

结束

相关推荐

WP-ADMIN似乎正在重定向

我的w-admin登录有一个奇怪的问题。这是从我升级到3.0以后才开始的,当我转到wp admin时,登录表单显示正常,但当我输入用户名并通过时,每次都会再次显示登录表单。使用密码恢复功能会导致电子邮件未找到错误。我知道用户名密码和电子邮件是正确的,b/c我可以访问mysql数据库,我可以看到值(至少用户名和电子邮件) 有人知道会出什么问题吗