En multisite, ce code redirige les utilisateurs (auteurs) vers /wp-admin/post-new.php après la connexion ... mais me redirige également (super administrateur), comment puis-je empêcher cela?
function primary_login_redirect( $redirect_to, $request_redirect_to, $user )
{
if ($user->ID != 0) {
$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';
if ($primary_url) {
wp_redirect($primary_url);
die();
}
}
}
return $redirect_to;
}
add_filter('login_redirect','primary_login_redirect', 100, 3);
Vous pouvez tester contre is_super_admin()
. Ce qui suit fonctionne dans mes tests:
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 );
La vérification is_a()
efface certains avis que j'ai reçus lors de la déconnexion.
EDIT: Si vous voulez créer une URL de redirection différente réservée aux super-administrateurs, je souhaite procéder à une restructuration de la sorte
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 );