登录重定向到上一页


8

我在http://netballscoop.com/log-in/有一个自定义的登录页面

填写用户名和密码后,它会将您重定向到完美的上一页。当您单击注销时,它会将您重定向到同一页面。因此,这一切都很好。

如果您将用户名/密码留空或出现错误,将导致您登录wp。为了防止这种情况,我使用了/programming/11477107/redirect-away-from-login-page上的代码

add_action('login_redirect', 'redirect_login', 10, 3);
function redirect_login($redirect_to, $url, $user) {
if($user->errors['empty_password']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['empty_username']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['invalid_username']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['incorrect_password']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else{
    wp_redirect(get_bloginfo('url').'/log-in');
}
exit;
}

这非常适合我网站上的登录错误。但是现在登录重定向将您带到http://netballscoop.com/members/testing(用户“ Testing”进入其BuddyPress成员的个人资料页面)。

用户登录后如何将用户重定向到上一页?


我先前发布的答案有点误读了您的问题,因此我将其删除,您是否已经尝试过绑定到wp_login操作?成功登录后,它是最后触发的事件之一。我在最近使用BuddyPress建立的网站上使用了它,它的工作原理很吸引人。
埃里克·艾伦

嗨,@ allenericr,老实说,我不知道从哪里开始。我对php / functions / etc的了解非常有限。如果发现它是一个更好的选择,是否可以发布您正在使用该网站的内容?
Tanya

Answers:


8

您可以login_redirect像这样过滤功能,根据需要进行调整。

add_filter('login_redirect', 'redirect_previous_page', 10, 1);

function redirect_previous_page( $redirect_to ){
    global $user;

    $request = $_SERVER["HTTP_REFERER"];

    if ( in_array( $user->roles[0], array( 'administrator') ) ) {

        return admin_url();

    } elseif ( in_array( $user->roles[0], array( 'subscriber') ) ) {

        return $request;
    } 

    return $redirect_to;
}

更新1:

上面的代码已被修改并经过测试-它可以工作。

更新2 :(由Tanya撰写)

与@userabuser聊天,并给出了有效的答案。

// Redirect to previous page 
remove_all_filters('login_redirect', 99);
add_filter('bbp_user_login_redirect_to', 'function_name');

重要的提示:

事实证明,Tanya使用的是bbPress论坛插件,因此尽管使用了原始代码段,

add_filter('login_redirect', 'function_name'); //the standard WordPress API filter

正确,并且确实可以在“正常” WordPress条件下运行,在这种情况下,bbPress过滤器优先覆盖了该地址,

add_filter('bbp_user_login_redirect_to', 'function_name'); //the bbPress API filter

现在,由于在文档bbPress.org其中详细介绍这些动作和钩子网站组织得很差,有点不完整的(据我可以告诉),我认为(任何人)寻求更多的资料,什么钩哪里什么什么过滤,应采取在这里查看此资源该资源提供了钩子和过滤器的详细列表。

注意:(其他)

进行更改'subscriber'以匹配您用于该类型用户的角色。由于它采用数组形式,因此它也可以接受多个角色。

in_array( $user->roles[0], array( 'subscriber', 'role2, role3', 'etc')

@Tanya已编辑代码以包含可选参数。$ user可能无法访问。尝试此更新,让我知道。
亚当

@Tanya嗨,Tanya,感谢您的更新。同时,您能否删除您的最后一条评论(将鼠标悬停时单击小号x),以便我们清理评论主题。我还将删除我不相关的评论。
亚当
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.