Comment changer le rôle d'un utilisateur?


34

J'ai des rôles personnalisés dans ma configuration et je veux pouvoir modifier automatiquement le rôle d'un utilisateur via une fonction. Supposons que l'utilisateur A ait un rôle d'abonné, comment puis-je le changer en EDITOR? Lors de l'ajout d'un rôle, nous venons de:

add_role( $role_name , $role_display_name , array( 'read' =>  true,
                                                   'edit_posts' => false,
                                                   'delete_posts' => false, ));

Que diriez-vous de changer de rôle? Y a-t-il quelque chose comme:

change_role($old_role, $new_role);

UPDATE: Je pense que celui-ci fera:

$wp_user_object = new WP_User($current_user->ID);
$wp_user_object->set_role('editor');

Réponses:


50

Voir la classe WP_User . Vous pouvez l'utiliser pour ajouter et supprimer des rôles à un utilisateur.

EDIT: J'aurais vraiment dû fournir plus d'informations avec cette réponse au départ, alors j'ajoute plus d'informations ci-dessous.

Plus spécifiquement, le rôle d'un utilisateur peut être défini en créant une instance de la classe WP_user et en appelant les méthodes add_role()ou remove_role().

Exemple

Changer un rôle d'abonné en éditeur

// NOTE: Of course change 3 to the appropriate user ID
$u = new WP_User( 3 );

// Remove role
$u->remove_role( 'subscriber' );

// Add role
$u->add_role( 'editor' );

J'espère que c'est plus utile que ma réponse initiale, qui n'était pas nécessairement aussi utile.


remove_role()et add_rule()sauvegarder des données dans la base de données?
b_dubb

18

Notez simplement qu'il existe un moyen plus simple de modifier le rôle d'utilisateur, ce qui est particulièrement utile lorsque vous ne connaissez pas le rôle actuel de l'utilisateur: ->set_role()

Exemple:

// Fetch the WP_User object of our user.
$u = new WP_User( 3 );

// Replace the current role with 'editor' role
$u->set_role( 'editor' );

N'oubliez pas que set_role supprimera les rôles précédents de l'utilisateur et attribuera le nouveau rôle.
Shasi Kanth

1
C'est parfait pour les formulaires d'inscription personnalisés. Commencez par enregistrer les utilisateurs sans rôles, puis ajoutez-les lorsqu'ils confirmeront leur courrier électronique.
Ivijan Stefan Stipić

3

Pour extrapoler la réponse de t31os, vous pouvez insérer quelque chose comme ceci dans votre fichier de fonctions si vous souhaitez le faire par programme en fonction d'une condition.

$blogusers = get_users($blogID.'&role=student');

foreach ($blogusers as $user) {

    $thisYear = date('Y-7');
    $gradYear = date(get_the_author_meta( 'graduation_year', $user->ID ).'-7');

    if($gradYear < $thisYear) {
        $u = new WP_User( $user->ID );
        // Remove role
        $u->remove_role( 'student' );

        // Add role
        $u->add_role( 'adult' );
    }
}

Je pense que votre utilisation de $blogIDest mauvaise. get_users()utilisera de toute façon l'ID de blog actuel par défaut.
fuxia

Eh oui, dans mon cas, la pâte était juste à partir d'un exemple multisite. Je ne l'ai pas défini ici non plus, alors évidemment, cela jetterait une erreur.
Adam Munns

2

Vous pouvez modifier le rôle de n'importe quel utilisateur en modifiant son profil. Plus besoin d'ajouter de code lorsque cette option est déjà intégrée à WordPress.

entrez la description de l'image ici

Ou

Vous pouvez utiliser le code pour changer tous les utilisateurs actuels avec le rôle d'abonné en éditeur:

$current_user = wp_get_current_user();

// Remove role
$current_user->remove_role( 'subscriber' );

// Add role
$current_user->add_role( 'editor' );

1

Il y a une fonction WordPress pour ça!

Je pense qu'il est préférable d'utiliser les fonctions WordPress, si et quand elles sont disponibles.

Vous pouvez utiliser la fonction wp_insert_user () , où l’un des arguments à fournir est le $ userdata ['role']. Dans cet argument, vous pouvez spécifier le rôle en lequel vous souhaitez changer l'utilisateur.


wp ne reconnaît pas cette fonction. J'ai eu une erreur "fonction non définie".
Joann

En apparence, wp_insert_user () semble faire exactement la même chose. Lorsque vous fournissez un identifiant, cet identifiant est mis à jour. Aucun identifiant n’ajoute un nouvel utilisateur. Je ne sais pas encore quelle est la différence entre wp_update_user () et wp_insert_user ().
Coen Jacobs

1

vous devez inclure le fichier /wp-includes/registration.php si vous utilisez le code en tant que script autonome. Cordialement Uwe


1

Vous pouvez utiliser wp_update_user . Votre code devrait être comme ceci:

<?php
    $user_id = 3;
    $new_role = 'editor';

    $result = wp_update_user(array('ID'=>$user_id, 'role'=>$new_role));

    if ( is_wp_error( $result ) ) {
        // There was an error, probably that user doesn't exist.
    } else {
        // Success!
    }
?>

0
<?php
$wuser_ID = get_current_user_id();
if ($wuser_ID)
    {
      // NOTE: Of course change 3 to the appropriate user ID
      $u = new WP_User( $wuser_ID );

      // Remove role
      $u->remove_role( 'subscriber' );

      // Add role
      $u->add_role( 'contributor' );
    }
?>

0

Je sais que très ancien poste, mais j'ai trouvé que les rôles pour les utilisateurs sont stockés dans le wp_usermetatableau avec la clé wp_capabilitiesdans la meta_keycolonne.

Si vous voulez changer le rôle d'utilisateur, vous pouvez le faire avec cette simple fonction.

function change_role($id, $new_role){
    GLOBAL $table_prefix;
    if(is_array($new_role)){
        $new_role_array = $new_role;
    }else{
        $new_role_array = array( $new_role => true );
    }
    return update_user_meta($id, $table_prefix.'capabilities', $new_role_array);
}

Il y a deux façons d'utiliser cette fonction.

Si vous souhaitez modifier le rôle pour un seul rôle.

change_role(2, 'editor'); // editor is the new role

Ou si vous souhaitez ajouter plusieurs rôles à l'utilisateur, utilisez les rôles comme tableau dans le deuxième paramètre.

$roles_array = array('editor' => true, 'administrator' => true); // roles array
change_role(2, $roles_array);

Bonne chance.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.