如何将 BuddyPress 菜单项重定向到 Wordpress 站点上的不同页面?
How to redirect BuddyPress Menu Item to a different page on the Wordpress site?
所以我在一个网站上工作,我正在我的 BuddyPress 个人资料页面上添加一个新的菜单项。已通过 bp-custom.php
页面正确添加菜单。但是当我点击菜单时,我无法将它重定向到我想要的页面。代码类似于:
function add_gift_card() {
global $bp;
bp_core_new_nav_item( array(
'name' => 'Gift Cards',
'slug' => 'shop',
// 'parent_url' => get_option('siteurl').'/shop',
// 'parent_slug' => $bp->profile->slug,
'screen_function' => 'gift_card_screen',
'position' => 90,
'default_subnav_slug' => 'shop'
) );
}
add_action( 'bp_setup_nav', 'add_gift_card', 100 );
function gift_card_screen() {
add_action( 'bp_template_content', 'gift_card_screen_content' );
bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ) );
}
function gift_card_screen_content() {
echo 'Gift Cards<br/>';
}
如何将其重定向到网站上的新页面,而不考虑根用户域?
您需要做的是发出带有 Location
键和值的 HTTP header。 WordPress 有一个功能可以为您做到这一点。
您要找的函数是wp_redirect()
。典型例子:
<?php
wp_redirect( $location, $status );
exit;
?>
这不是黑魔法,基本上是这样做的:
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.anyhost.com");
但最好在WordPress环境中使用WordPress相关功能,因为开发者喜欢响应这类动作并过滤各种相关数据。
改变这个:
// 'parent_url' => get_option('siteurl').'/shop',
// 'parent_slug' => $bp->profile->slug,
为此:
'parent_url' => $bp->displayed_user->domain,
'parent_slug' => $bp->profile->slug,
然后试试这个:
function gift_card_screen_content() {
bp_core_redirect( site_url( '/shop/' ) );
}
我必须删除模板函数,才能正确重定向它。正如 shanebp 所建议的那样, bp_core_redirect 函数派上了用场。代码现在如下所示:
function add_gift_card() {
global $bp;
bp_core_new_nav_item( array(
'name' => 'Gift Cards',
'slug' => 'shop',
'screen_function' => 'gift_card_screen',
'position' => 90,
'default_subnav_slug' => 'shop'
) );
}
add_action( 'bp_setup_nav', 'add_gift_card', 100 );
function gift_card_screen() {
bp_core_redirect( get_option('siteurl').'/shop/' );
}
所以我在一个网站上工作,我正在我的 BuddyPress 个人资料页面上添加一个新的菜单项。已通过 bp-custom.php
页面正确添加菜单。但是当我点击菜单时,我无法将它重定向到我想要的页面。代码类似于:
function add_gift_card() {
global $bp;
bp_core_new_nav_item( array(
'name' => 'Gift Cards',
'slug' => 'shop',
// 'parent_url' => get_option('siteurl').'/shop',
// 'parent_slug' => $bp->profile->slug,
'screen_function' => 'gift_card_screen',
'position' => 90,
'default_subnav_slug' => 'shop'
) );
}
add_action( 'bp_setup_nav', 'add_gift_card', 100 );
function gift_card_screen() {
add_action( 'bp_template_content', 'gift_card_screen_content' );
bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ) );
}
function gift_card_screen_content() {
echo 'Gift Cards<br/>';
}
如何将其重定向到网站上的新页面,而不考虑根用户域?
您需要做的是发出带有 Location
键和值的 HTTP header。 WordPress 有一个功能可以为您做到这一点。
您要找的函数是wp_redirect()
。典型例子:
<?php
wp_redirect( $location, $status );
exit;
?>
这不是黑魔法,基本上是这样做的:
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.anyhost.com");
但最好在WordPress环境中使用WordPress相关功能,因为开发者喜欢响应这类动作并过滤各种相关数据。
改变这个:
// 'parent_url' => get_option('siteurl').'/shop',
// 'parent_slug' => $bp->profile->slug,
为此:
'parent_url' => $bp->displayed_user->domain,
'parent_slug' => $bp->profile->slug,
然后试试这个:
function gift_card_screen_content() {
bp_core_redirect( site_url( '/shop/' ) );
}
我必须删除模板函数,才能正确重定向它。正如 shanebp 所建议的那样, bp_core_redirect 函数派上了用场。代码现在如下所示:
function add_gift_card() {
global $bp;
bp_core_new_nav_item( array(
'name' => 'Gift Cards',
'slug' => 'shop',
'screen_function' => 'gift_card_screen',
'position' => 90,
'default_subnav_slug' => 'shop'
) );
}
add_action( 'bp_setup_nav', 'add_gift_card', 100 );
function gift_card_screen() {
bp_core_redirect( get_option('siteurl').'/shop/' );
}