web-dev-qa-db-fra.com

Comment changer le rôle d'un utilisateur?

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, il suffit 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');
33
Joann

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, donc j'ajoute plus d'informations ci-dessous.

Plus spécifiquement, un rôle d'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.

48
t31os

Notez simplement qu’il existe un moyen plus simple de modifier le rôle de l’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' );
14
Philipp

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' );
    }
}
3
Adam Munns

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.

enter image description here

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' );
2
Brad Dalton

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

<?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!
    }
?>
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.

1
Coen Jacobs

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

1
Uwe
<?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
Wasim Khan

Je sais que c'est un très vieux message, mais j'ai constaté que les rôles des utilisateurs sont stockés dans la table wp_usermeta avec la clé wp_capabilities dans la colonne meta_key.

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 en tant que tableau dans le deuxième paramètre.

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

Bonne chance.

0
Mohammed Alhanafi