web-dev-qa-db-fra.com

Comment rediriger lors de la connexion un utilisateur spécifique en fonction de son rôle?

Je voudrais forcer un utilisateur à une page spécifique lors de la connexion en fonction de leur rôle en utilisant

if ( current_user_can('contributor') )

et la fonction de connexion principale

function wp_loginout($redirect = '', $echo = true) {
    if ( ! is_user_logged_in() )
        $link = '<a href="' . esc_url( wp_login_url(get_permalink()) ) . '">' . __('Log in') . '</a>';
    else
        $link = '<a href="' . esc_url( wp_logout_url(get_permalink()) ) . '">' . __('Log out of account') . '</a>';

    if ( $echo )
        echo apply_filters('loginout', $link);
    else
        return apply_filters('loginout', $link);
}

J'ai essayé un certain nombre de combinaisons et semble échouer. Toute aide serait appréciée.

2
Zach Shallbetter

filtre login_redirect:

function my_login_redirect_contributors() {
  if ( current_user_can('contributor') ){
      return 'url-to-redirect-to';
  }
}

add_filter('login_redirect', 'my_login_redirect_contributors');
6
Milo

J'espère que cette question date d'un an et peut aider certaines personnes.

J'ai rencontré un cas où la réponse acceptée ne fonctionnait pas car le $current_user global était un objet WP_User mais avait des valeurs nulles. Le code suivant est ce que j'ai trouvé pour fonctionner. Notez l'utilisation du 3ème paramètre $user:

function 22352_login_redirect( $redirect_url, $POST_redirect_url, $user ) {
  if ( is_a( $user, 'WP_User' ) && $user->has_cap( 'manage_options' ) ) {
    $redirect_url = 'url-to-redirect-to';
  }
  return $redirect_url;
}
add_filter( 'login_redirect', array( $this, 'wpse22352_login_redirect' ), 10, 3 );
3
MikeSchinkel