根据用户角色登录后重定向(自定义登录页面)

时间:2019-05-22 作者:Sh.Dehnavi

我创建了一个自定义登录页面,一切正常,但有一个问题。我想根据登录后的角色将用户重定向到不同的页面。我的代码如下,但我不知道为什么它不起作用:

        if (!$has_error) {
            $info = array();
            $info[\'user_login\'] = $user_login;
            $info[\'user_password\'] = $password;
            $info[\'emember\'] = $remember;
            $user_signon = wp_signon($info,false);

        if(is_wp_error($user_signon)){
            $has_error = true;
            $message[] = "an error";
        }else{

            $currentuser = wp_get_current_user();
            $currentuserroles = $currentuser -> roles;
            if( in_array( \'author\', $currentuserroles ) ){
                $redirect = site_url().\'/dashboard-teacher\';

            }elseif( in_array( \'subscriber\', $currentuserroles ) ){
                $redirect = site_url().\'/dashboardwwp-student\';

            }else{
                $redirect = site_url();

            }
            wp_redirect( $redirect );
            exit;

        }
    }

3 个回复
最合适的回答,由SO网友:Sh.Dehnavi 整理而成

我自己找到了答案。我用过wp_get_current_user() 虽然wp_get_current_user() 可能无法在此步骤设置然后我尝试user_can 具有$user_signon 我之前为用户登录定义的。因此,新代码:

        if( user_can($user_signon, \'author\') ){

            $redirect = site_url().\'/pishkhan-teacher\';

        }elseif( user_can($user_signon, \'subscriber\') ){

            $redirect = site_url(\'/pishkhan-student\');

        }elseif( user_can($user_signon, \'wpas_user\') ){

            $redirect = site_url(\'/pishkhan-student\');

        }else{

            $redirect = site_url();

        }
        wp_redirect( $redirect );
        exit;

SO网友:Rafiq

试试这个。这对我有用。

add_filter( \'login_redirect\', \'redirect_non_admin_to_dashboard\'), 10, 3 );
function redirect_non_admin_to_dashboard($redirect_to, $requested_redirect_to, $user ) {
    global $user;
    if( ! isset( $user->ID ) ) {
        return $redirect_to;
    }

    if ( ! in_array( \'author\', (array) $user->roles ) ) {
        $redirect_to  =  site_url().\'/dashboard-teacher\';
    }elseif( in_array( \'subscriber\',(array) $user->roles ) ){
            $redirect_to = site_url().\'/dashboardwwp-student\';

        }else{
            $redirect_to = site_url();

        }
    return wp_validate_redirect( $redirect_to, home_url() ); // return a safe redirect url between the site.
}

SO网友:Ted Stresen-Reuter

您的代码中有一个输入错误:$info[\'emember\'] = $remember; 应该是$info[\'remember\'] = $remember; (“记住”拼写错误)但我不认为这是问题的根源

  • wp_get_current_user(); 返回WP\\u Error对象或WP\\u User对象(如果存在错误,则返回前者;如果存在经过身份验证的用户,则返回后者)。而不是打电话wp_get_current_user(), 只需使用返回的WP\\u用户对象:$user_signon->roles. 代码越少,出错的机会就越小(虽然我也不认为这是错误)
  • site_url() 技术上是一个模板标记。虽然它似乎返回站点URL,但如果它不在“循环中”,则可能无法工作。请尝试将其替换为,而不是使用site\\u urlget_site_url(). 此外,两者site_url()get_site_url() 接受两个可选参数:1)要附加到站点URL的路径和2)要使用的方案。而不是使用字符串串联运算符(.)附加路径,只需将路径作为函数的第一个参数:$redirect = get_site_url(\'/dashboard-teacher\'). 再说一次,我认为这两个都不是你的问题wp_redirect() 在模板中,而不是在函数中调用的挂钩中。php),那么重定向就不能得到保证,即使现在WordPress和浏览器都有一定的灵活性,并且通常可以正确处理这个问题
  • 除了上面提到的项目之外,您的代码看起来不错,应该可以正常工作。只要您在template_redirect 钩子,应该有用。一旦您解决了上述问题,如果它继续失败,那么我需要查看您用于处理表单的其余代码(您使用的是什么挂钩),并且可能需要查看有关权限的所有信息并验证目标URL,然后才能提出任何建议。

    HTH公司

    相关推荐

    WordPress USERS表缺少索引

    不久前,有人在fiverr为我设计了一个wordpress网站。完成后,他们向我发送了数据库,我将其导入到我的服务器上并进行了设置。从那以后,我意识到数据库有些古怪。我可以添加没有问题的插件,我已经在这里和那里编辑了一些页面,但是如果我尝试创建一个新的帖子、页面等,我会收到一条消息,我正在“当前编辑显示您最新帖子的页面”此外,当我查看结构时,“我的用户”表显示零索引,因此在phpMyAdmin中,我会收到一条警告消息“当前选择不包含唯一列。网格编辑、复选框、编辑、复制和删除功能不可用。”然而,如果我尝试在