是否将管理员发送到与用户不同的登录?

时间:2016-02-22 作者:Brett

我在上创建了一个单独的登录页/login/ 并且有wp-login.php 也在那里重定向-我还连接了一些与WP登录相关的挂钩,如wp_login_failed 这样人们就可以在那里重新定向。

然而,我现在已经决定,我希望管理员能够继续从标准位置登录,并为用户保留这一点-这里没有问题,因为我可以引导用户/login/ 并删除重定向。

这样做的问题是用户将被重定向到的错误/wp-login.php 同样,如果我把重定向放回去,那么管理员用户将被定向到/login/ 相反

如何处理?

1 个回复
最合适的回答,由SO网友:тнє Sufi 整理而成

您可以使用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.