登录重定向错误-$USER->角色

时间:2016-02-16 作者:user319940

我正在使用以下代码执行一个简单的登录重定向到自定义管理页面:

function my_login_redirect( $redirect_to, $request, $user ) {
    if ( is_array( $user->roles ) ) {
        if ( in_array( \'administrator\', $user->roles )  || in_array( \'shop_manager\', $user->roles ) ) {
            return admin_url( \'admin.php?page=welcome-page.php\' );
        } else {
            return admin_url();
        }
    }
}
add_filter( \'login_redirect\', \'my_login_redirect\', 10, 3 );
然而,我得到了一个错误:

注意:未定义的属性:WP\\u错误::$角色

它所指的线是if ( is_array( $user->roles ) ) {

这似乎是WordPress文档中推荐的方法-这里会出什么问题?

1 个回复
SO网友:Dan Ștefancu

查看PhpDocslogin_redirect 过滤器我发现第三个参数可能是WP_Error 对象而不是WP_User:

$user WP\\u user object如果登录成功,则返回WP\\u Error object。

因此,您可以使用以下代码示例:

function dls160216_login_redirect( $redirect_to, $request, $user ) {
    if ( ! is_wp_error( $user ) ) {
        // do redirects on successful login
        if ( $user->has_cap( \'administrator\' ) || $user->has_cap( \'shop_manager\' ) ) {
            return admin_url( \'admin.php?page=welcome-page.php\' );
        } else {
            return admin_url();
        }
    } else {
        // display errors, basically
        return $redirect_to;
    }
}
add_filter( \'login_redirect\', \'dls160216_login_redirect\', 10, 3 );
注意,我使用has_cap 方法它更经得起未来考验,并允许更好的过滤。可以验证功能或角色。