You can test against is_super_admin()
. The following works in my testing:
function primary_login_redirect( $redirect_to, $request_redirect_to, $user ) {
if ( is_a( $user, 'WP_User' ) && ! is_super_admin( $user->ID ) ) {
if ( $user_info->primary_blog ) {
$user_info = get_userdata( $user->ID );
$primary_url = get_blogaddress_by_id( $user_info->primary_blog ) . 'wp-admin/post-new.php';
if ( $primary_url ) {
wp_redirect( $primary_url );
die();
}
}
}
return $redirect_to;
}
add_filter( 'login_redirect', 'primary_login_redirect', 100, 3 );
The is_a()
check clears some notices I got when logged out.
EDIT: If you want to do a different redirect URL for super admins only, I’d restructure to something like this:
function primary_login_redirect( $redirect_to, $request_redirect_to, $user ) {
if ( is_a( $user, 'WP_User' ) ) {
if ( ! is_super_admin( $user->ID ) ) {
$user_info = get_userdata( $user->ID );
if ( $user_info->primary_blog )
$primary_url = get_blogaddress_by_id( $user_info->primary_blog ) . 'wp-admin/post-new.php';
} else { // super admins
$primary_url = network_admin_url( 'sites.php' );
}
if ( $primary_url ) {
wp_redirect( $primary_url );
die();
}
}
return $redirect_to;
}
add_filter( 'login_redirect', 'primary_login_redirect', 100, 3 );