重写wp-login.php?action=Register保持不变的规则

时间:2011-10-17 作者:deltakid

不幸的是,buddypress因为重写规则而破坏了facebook连接脚本。It变化/wp-login.php?action=register 进入/register/

我试图找到自定义重写规则的位置,但没有成功。有没有什么方法可以添加一些内容。HTWP离开的访问权限/wp登录。php?动作=单独注册?

我试过一些事情,比如

RewriteRule ^wp-login\\.php$ - [PT,L]
但它没有起作用。

任何帮助都会很棒。

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

我假设您使用的是最新版本之一,但我使用的是最新的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_componentregister. 然而,我们既不能设置current_componentregister 也不直接打电话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_componentregister; 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登录页面?没有更多信息就无法知道。

结束

相关推荐

使用.htAccess重定向Feedburner摘要时出现问题

我使用年/月/帖子名permalinks,还使用下载监控插件来处理文件下载。我在的顶部添加了重写规则。htaccess文件instructions at perishable press. 我只是在另一个博客上做了同样的事情,效果很好。唯一的区别是blog没有使用下载监视器,并且安装在域的根目录中,而不是/blog/ 子目录。如果我注释掉这一行:RewriteCond %{REQUEST_URI} ^/?feed.* [NC] 它起作用了。我只是好奇,如果这一行行不通,为什么会出现在说明书中?它