在管理员中添加带有URL的菜单和子菜单,而不是插件?

时间:2013-01-30 作者:Baylock

我使用此函数和挂钩:

function mysite_admin_menu() 
{
  add_menu_page( \'Categories\', \'Catégories\', \'administrator\', \'categories\', \'a_function\' );
  add_submenu_page( \'categories\', \'Manage\', \'Manage\', \'administrator\', \'xxx\', \'a_function\' );
  remove_submenu_page(\'categories\',\'categories\');
}
add_action( \'admin_menu\', \'mysite_admin_menu\' );
它显示我需要的内容:在左侧管理菜单栏上有一个子菜单。

问题是,子菜单指向此页面:admin.php?page=xxx.

如何链接到URL,如edit-tags.php?taxonomy=category?

如果我把子弹换成add_submenu_page 使用相对URL,链接将指向admin.php?page=edit-tags.php?taxonomy=category.

无论我做什么,我总是admin.php?page=... 这不是我想要的。

5 个回复
SO网友:Bryan Willis

这是一篇老帖子,但你不能只用wordpress吗$menu 和/或$submenu 奥列格(Oleg)在第二条中提出的全球性问题。

如有疑问,请复制WordPress:

wordpress/wp-admin/menu.php

例如,要添加链接,这似乎是可行的:

function add_external_link_admin_submenu() {
    global $submenu;
    $permalink = admin_url( \'edit-tags.php\' ).\'?taxonomy=category\';
    $submenu[\'options-general.php\'][] = array( \'Manage\', \'manage_options\', $permalink );
}
add_action(\'admin_menu\', \'add_external_link_admin_submenu\');
您可以更换$permalink = ... 什么都可以

因此,这也应该起作用:

$permalink = \'http://www.example.com\';
此外,建议不要使用“administrator”(即使我也使用它)。无论如何,请阅读this ticket 用于替代解决方案。

SO网友:Oleg Butuzov

我不建议你那样做。

让我们假设您的前缀为admin.php_trigger_me_

子菜单

<?php

function _clean_url_to_repalce_admin_menu($url, $original_url, $_context){
    if ($url == \'admin.php?page=_trigger_me_\'){
        remove_filter(\'clean_url\', \'_clean_url_to_repalce_admin_menu\', 10);
        //return admin_url(\'someotherpage.php);
        return \'http://google.com/\';
    }
}
if (is_admin())
add_filter(\'clean_url\', \'_clean_url_to_repalce_admin_menu\', 10, 3);
主菜单

<?php
function custom_admin_menu_action_hook(){
    global $menu;
    foreach($menu as $k=>$item){
        if ($item[2] == \'_trigger_me_\'){
                $menu[$k][2] = \'http://google.com\';
        }
    }
}
add_action(\'admin_menu\', \'custom_admin_menu_action_hook\', 100);
我把这两个例子都称为“黑客”。他们可能这样做,但最好不要这样做。

使现代化

if case if满足重定向=)

<?php
$hook = add_submenu_page($parent, $title, $menu_title, \'manage_option\', \'callback\');
add_action("load-{$hook}", create_function(\'\',\'
    header("Location:", admin_url("someurl.php?blahblahblah"));
    exit;
\'));
如果您想用分类法页面替换此页面(edit-tags.php)

<?php
add_action(\'admin_menu\', \'admin_menu_edit_tags_page\');
function admin_menu_edit_tags_page(){
    // please set $YOURPARENTSLUG as parent slug of your menu item (parent of your menu)
    // manage_tags to manage_terms of your taxonomy capability (its visible whan you var_dump($wp_taxonomies[$taxonomyyouwant]));
    add_submenu_page($YOURPARENTSLUG, \'menu\', \'title\', \'manage_tags\',  \'edit-tags.php?taxonomy=taxonomy\');
}

SO网友:Lucas Bustamante

如果子菜单缺少admin.php?page= 前缀,您应该先注册父菜单,然后注册子菜单。

add_action( \'admin_menu\', function() {

// Parent menu first
add_menu_page( \'Page title\', \'Menu Title\', \'capability\', \'parent-slug\', \'callback\' );

// Then the submenus
add_submenu_page( \'parent-slug\', \'Submenu Page Title\', \'Submenu Title\', \'capability\', \'slug\', \'callback\' );

} );
否则,链接将只是一个slug。

SO网友:Baylock

谢谢你,Oleg,你的脚本工作正常,但破坏了管理界面(背景色和图像由于任何原因都会消失)。

但如果我必须走这条路,我可以这样做:

function changeUrl()
{
    $pageURL = \'http://\'.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];

    if ($pageURL == \'http://www.mysite.com/wp-admin/admin.php?page=xxxx\')
    {
        header (\'location:http://www.mysite.com/wp-admin/edit-tags.php?taxonomy=category\');
    }
}
add_action( \'admin_menu\', \'changeUrl\' );
我觉得奇怪的是,没有简单的方法将子菜单链接到任何url。这种重定向很混乱。。。但这是可行的。

SO网友:barudo

虽然这是一个老问题,但我还是想贡献一下代码:

function mysite_admin_menu() 
{
  add_menu_page( \'Categories\', \'Catégories\', \'administrator\', \'categories\', \'a_function\' );
  add_submenu_page( \'categories\', \'Manage\', \'Manage\', \'administrator\', \'manage_categories\', \'mysite_manage_categories\' );
  remove_submenu_page(\'categories\',\'categories\');
}
add_action( \'admin_menu\', \'mysite_admin_menu\' );

function mysite_manage_categories() 
{ 

?><script>window.location = "<?php echo admin_url(\'edit-tags.php?taxonomy=category\'); ?>";</script><?php 
    }
它使用javascript重定向,而不是创建另一个add\\u操作来通过http重定向。

结束

相关推荐

Template for slug

我正在使用“Edit Author Slug”插件在我的网站上使用以下结构提供公共配置文件页面:mysite.com/users/username.现在,我想显示上所有用户的列表mysite.com/users/. 但这会返回404,因为“用户”路径只是插件创建的一个slug。WP是否提供了创建slug模板的可能性(就像标记模板一样)?还是有其他方法来实现这一点?感谢您的帮助:-)