web-dev-qa-db-fra.com

Comment cibler un rôle d'utilisateur spécifique?

J'essaie de placer un groupe de codes simple pour rediriger les "abonnés" uniquement, vers la page d'accueil (ou une page souhaitée) après la connexion. Je pensais utiliser if( current_user_can('read') ):, mais il s’agit d’une fonctionnalité globale qui sera également applicable à tous les autres rôles. J'ai donc essayé get_role('subscriber'). Voici mes codes functions.php (grâce à Len ):

function subscriber_redirection() {
    global $redirect_to;
    if( get_role('subscriber') ) {
        if ( !isset( $_GET['redirect_to'] ) ) {
            $redirect_to = get_option('siteurl');
        }
    }
}

Mais cela redirige aussi les administrateurs!

  • Comment puis-je cibler uniquement un rôle d'utilisateur spécifique dans un but précis?
1
Mayeenul Islam

get_role ne fait que renvoyer des informations sur le rôle. Cela ne vous dira pas si l'utilisateur actuel a ce rôle. Utilisez wp_get_current_user avec une coche semblable à ceci:

function subscriber_redirection() {
    global $redirect_to;
    $user = wp_get_current_user();
    if (in_array('subscriber',$user->roles)) {
        // user has subscriber role
        if ( !isset( $_GET['redirect_to'] ) ) {
            $redirect_to = get_option('siteurl');
        }
    }
}

Je ne sais pas pourquoi vous utilisez global $redirect_to; mais ne faites jamais rien avec la variable.

3
s_ha_dum

'get_role' retourne un objet, pas un booléen: http://codex.wordpress.org/Function_Reference/get_role

// for example: if the user can not moderate comments
if (!current_user_can('moderate_comments') ) {

//redirect

}

Vous pouvez trouver toutes les fonctionnalités ici: http://codex.wordpress.org/Roles_and_Capabilities

2
Stephan Vierkant