我正在使用以下代码执行一个简单的登录重定向到自定义管理页面:
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文档中推荐的方法-这里会出什么问题?
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 方法它更经得起未来考验,并允许更好的过滤。可以验证功能或角色。