您可以使用login_redirect 滤器
function my_login_redirect( $redirect_to, $request, $user ) {
global $user;
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
//check for admins
if ( in_array( \'administrator\', $user->roles ) ) {
// redirect them to the default place
//make wp-admin as your default place, if you customized it
return $redirect_to;
} else {
return home_url(\'/login/\');
}
} else {
return $redirect_to;
}
}
add_filter( \'login_redirect\', \'my_login_redirect\', 10, 3 );
更新我假设您正在使用
wp_login_form 用于自定义登录页,并已连接到
authenticate 处理空用户名和/或密码问题。
我们可以使用$_SERVER[\'HTTP_REFERER\'] 检查请求来自何处,并根据需要重定向。
function wpse9845_my_awesome_login_fail( $username ) {
$referrer = $_SERVER[\'HTTP_REFERER\']; // where did the post submission come from?
// if there\'s a valid referrer, and it\'s not the default wp-login.php ot wp-admin screen
if ( !empty($referrer) && !strstr($referrer,\'wp-login\') && !strstr($referrer,\'wp-admin\') ) {
wp_redirect( $referrer );
exit;
}
}
add_action( \'wp_login_failed\', \'wpse9845_my_awesome_login_fail\' );
上述代码有一个不好的方面:
$_SERVER[\'HTTP_REFERER\'] 并非所有用户代理都支持。
注意事项(from php.net): HTTP_REFERER - 将用户代理引用到当前页面的页面(如果有)的地址。这是由用户代理设置的。并非所有用户代理都会设置此选项,有些代理提供修改HTTP_REFERER 作为功能。简言之,它真的不可信
最好的方法是使用完全自定义的登录页面/表单以及身份验证。Here is a very good tutorial.