问题描述
我有一个自定义登录页面在 http://netballscoop.com/log-in/
当您填写用户名和密码时,将重定向到上一页,您完全可以。当您单击 「注销」 时,将重定向到同一页面。所以这一切都很好。
如果您将用户名/密码留空或出现错误,将导致您进入 wp-login 。为了防止这种情况,我使用了 https://stackoverflow.com/questions/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 成员的个人资料页面) 。
用户登录时如何将其重定向到上一页?
最佳解决方案
您可以过滤 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
这是正确的,并且在”normal” 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')
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。