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.