Looking at PhpDocs for login_redirect
filter I found out that the third param could be a WP_Error
object instead of a WP_User
:
$user WP_User object if login was successful, WP_Error object otherwise.
So a working code sample for you would be:
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 );
Note that I used has_cap
method. It’s more future-proof and allows for better filtering. Can verify a capability or a role.