Comment changer le rôle d'un utilisateur?

32

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);

MISE À JOUR: Je pense que celui-ci fera:

$wp_user_object = new WP_User($current_user->ID);
$wp_user_object->set_role('editor');
    
posée Joann 01.12.2010 - 10:42

8 réponses

45

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

MODIFIER: J'aurais vraiment dû fournir plus d'informations avec cette réponse au départ. Je vais donc ajouter plus d'informations ci-dessous.

Plus précisément, vous pouvez définir le rôle d'un utilisateur en créant une instance de la classe WP_user et en appelant les méthodes add_role() ou remove_role() .

Exemple

Modifier 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.

    
réponse donnée t31os 01.12.2010 - 12:09
14

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' );
    
réponse donnée Philipp 14.06.2015 - 16:38
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' );
    }
}
    
réponse donnée Adam Munns 29.10.2012 - 19:42
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.

Ou

Vous pouvez utiliser du code pour modifier tous les utilisateurs actuels dotés du 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' );
    
réponse donnée Brad Dalton 16.04.2015 - 09:03
1

Il existe une fonction WordPress pour cela!

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 transformer l'utilisateur.

    
réponse donnée Coen Jacobs 01.12.2010 - 12:16
1

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

    
réponse donnée Uwe 22.12.2010 - 15:50
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!
    }
?>
    
réponse donnée Nour Edin Al-Habal 09.11.2016 - 12:17
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' );
    }
?>
    
réponse donnée Wasim Khan 07.08.2017 - 04:13

Lire d'autres questions sur les étiquettes