我假设您使用的是最新版本之一,但我使用的是最新的1.5.1。不知道你的特定Facebook Connect插件是如何工作的,也不知道它为什么会中断,我想到了这一点。
简短回答
// bp-members/bp-members-signup.php ~ line 611
if ( defined( \'BP_SKIP_REGISTRATION_REDIRECT\' ) and BP_SKIP_REGISTRATION_REDIRECT )
wp_redirect( \'/?pagename=register\' );
和过滤器:
function wpse31346_filter_bp_uri( $path ) {
if ($path == \'?pagename=register\')
return \'/register\';
return $path;
}
add_filter( \'bp_uri\', \'wpse31346_filter_bp_uri\' );
长答案
bp_core_wpsignup_redirect()
是包含您正在谈论的重定向的函数。
http://buddypress.trac.wordpress.org/browser/tags/1.5.1/bp-members/bp-members-signup.php#L604正如你可悲地看到的,没有钩子可以让你改变行为。因此,您很可能必须亲自破解BuddyPress核心。
通过添加以下内容:
// Not at the WP core signup page and action is not register
if ( false === strpos( $_SERVER[\'SCRIPT_NAME\'], \'wp-signup.php\' ) && ( \'register\' != $action ) )
return;
if ( defined( \'BP_SKIP_REGISTRATION_REDIRECT\' ) and BP_SKIP_REGISTRATION_REDIRECT ) return;
// Redirect to sign-up page
if ( locate_template( array( \'registration/register.php\' ), false ) || locate_template( array( \'register.php\' ), false ) )
bp_core_redirect( bp_get_signup_page() );
然后简单地添加
define( \'BP_SKIP_REGISTRATION_REDIRECT\', true )
到您的
wp-config.php
文件,它应该跳过重定向。
However, 现在访问链接将显示默认的WordPress注册页面,哎哟。这可能会破坏用户体验。
BuddyPress“重写”系统非常复杂(它被称为“URI捕捉器”),在这种情况下,它会分解请求并在页面段塞中搜索精确匹配的内容,以提供最终URL,而在这种情况下,页面段塞是register
.
让我们想一想,还有什么其他方法可以访问register
在我们的案例中,不使用/register
要求你会很想重定向到index.php?pagename=register
, 然而,这不起作用,该页面是空的,没有被BuddyPress URI捕捉器捕捉到,另一个哎哟。
什么时候register
在/register
URL设置$bp->current_component
到register
. 然而,我们既不能设置current_component
到register
也不直接打电话bp_load_template(\'registration/register\')
作为$bp
全局is尚未在重定向点初始化。
也许我们可以升旗?通过实施此黑客:
if ( defined( \'BP_SKIP_REGISTRATION_REDIRECT\' ) and BP_SKIP_REGISTRATION_REDIRECT ) {
define( \'BP_SHOW_REGISTRATION_PAGE\', true );
return;
}
似乎没有任何干净的方法可以将任何东西与此过程挂钩,
bp_load_template()
, 这给了我们一个筛选模板的机会,如果没有URI catcher的匹配,它将不会执行,它只会返回注释
// This is not a BuddyPress page, so just return.
http://buddypress.trac.wordpress.org/browser/tags/1.5.1/bp-core/bp-core-catchuri.php#L209功能中有一个过滤器位于上方http://buddypress.trac.wordpress.org/browser/tags/1.5.1/bp-core/bp-core-catchuri.php#L54 调用bp_uri
, 我们可以将其连接起来,改变BuddyPress的感知,比如:
function wpse31346_filter_bp_uri( $path ) {
if ($path == \'/wp-login.php?action=register\')
return \'/register\';
return $path;
}
add_filter( \'bp_uri\', \'wpse31346_filter_bp_uri\' );
Yet, WordPress仍将加载其
wp-login.php
即使是在我们设法匹配BuddyPress并让其设置
current_component
到
register
;
bp_load_tempalate()
未联系到。
我提醒您当前的问题-我们无法在成功停止重定向后显示BuddyPress注册页面,以防您忘记:)
这个bp_screens
使用启动操作wp
操作,当wp-login.php
是被要求的,所以它是脱钩的。我们可以重定向到?pagename=register
, bp_screens
被触发,所以bp_uri
过滤器更改将成功地雪崩到bp_load_template()
.
因此,在与自己进行了长时间的交谈之后,我提供了以下涉及核心黑客的解决方案:
// bp-members/bp-members-signup.php ~ line 611
if ( defined( \'BP_SKIP_REGISTRATION_REDIRECT\' ) and BP_SKIP_REGISTRATION_REDIRECT )
wp_redirect( \'/?pagename=register\' );
和过滤器:
function wpse31346_filter_bp_uri( $path ) {
if ($path == \'?pagename=register\')
return \'/register\';
return $path;
}
add_filter( \'bp_uri\', \'wpse31346_filter_bp_uri\' );
结论希望我的回答能让我对BuddyPress的工作原理以及这个URI捕获系统的灵活性有足够的了解。这是我第一次研究BuddyPress,所以我可能在浏览源代码和文档时错过了一些重要的东西,所以希望有人能提供一些额外的提示和解决方案来改进答案。
如果你能提供更多关于它为什么会中断以及Facebook Connect插件需要什么的信息,我可以进一步改进我的答案。也许它根本不喜欢重定向?或者想要标准WordPress登录页面?没有更多信息就无法知道。