Come cambiare il ruolo di un utente?

1 dic 2010, 11:42:55
Visualizzazioni: 131K
Voti: 54

Ho dei ruoli personalizzati nel mio setup e voglio essere in grado di cambiare automaticamente il ruolo di un utente attraverso una funzione. Ad esempio, se l'utente A ha un ruolo SOTTOSCRITTORE, come posso cambiarlo in EDITOR? Quando aggiungiamo un ruolo usiamo semplicemente:

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

E per quanto riguarda il cambio di ruolo? Esiste qualcosa del tipo:

change_role($old_role, $new_role);

AGGIORNAMENTO: Penso che questo funzionerà:

$wp_user_object = new WP_User($current_user->ID);
$wp_user_object->set_role('editor');
0
Tutte le risposte alla domanda 9
4
73

Vedi la classe WP_User, puoi utilizzarla per aggiungere e rimuovere ruoli per un utente.

Nello specifico, il ruolo di un utente può essere modificato creando un'istanza della classe WP_User e chiamando i metodi add_role, remove_role o set_role a seconda delle tue esigenze.

Esempio

Rimozione del ruolo subscriber e successiva aggiunta del ruolo editor.

// Assicurati di modificare `3` con un ID utente appropriato
$u = new WP_User( 3 );

// Rimuovi ruolo
$u->remove_role( 'subscriber' );

// Aggiungi ruolo
$u->add_role( 'editor' );

I metodi add e remove sono probabilmente più adatti a casi d'uso in cui agli utenti vengono assegnati più ruoli.

Se il tuo obiettivo è semplicemente cambiare un ruolo, questo può essere fatto più facilmente utilizzando il metodo set_role, in questo modo.

// Assicurati di modificare `10` con un ID utente appropriato
$u = new WP_User( 10 );

// Cambia ruolo
$u->set_role( 'author' );

Spero che questo ti sia utile.

1 dic 2010 13:09:35
Commenti

remove_role() e add_rule() salvano i dati nel database?

b_dubb b_dubb
29 ott 2019 23:42:16

Sì @b_dubb, entrambi i metodi salvano nel database tramite il metodo update_user_meta() qui. Vedi add_role() qui e remove_role() qui

Gonçalo Figueiredo Gonçalo Figueiredo
7 gen 2020 14:58:11

Molto utile. Grazie.

b_dubb b_dubb
7 gen 2020 23:07:07

set_role() rimuoverà tutti i ruoli e aggiungerà il ruolo specificato in un unico comando

G-J G-J
19 apr 2020 01:11:10
2
33

Tieni presente che esiste un modo più semplice per modificare il ruolo dell'utente, particolarmente utile quando non conosci il ruolo corrente dell'utente: ->set_role()

Esempio:

// Recupera l'oggetto WP_User del nostro utente.
$u = new WP_User( 3 );

// Sostituisci il ruolo corrente con il ruolo 'editor'
$u->set_role( 'editor' );
14 giu 2015 17:38:42
Commenti

Ricorda che set_role rimuoverà i ruoli precedenti dell'utente e assegnerà il nuovo ruolo.

shasi kanth shasi kanth
3 mag 2016 15:52:07

Questo è perfetto per i moduli di registrazione personalizzati. Prima registra gli utenti senza ruoli e poi aggiungi il ruolo quando confermano l'email.

Ivijan Stefan Stipić Ivijan Stefan Stipić
15 set 2017 20:34:20
2

Per ampliare la risposta di t31os, puoi inserire qualcosa come questo nel tuo file functions se vuoi farlo in modo programmatico in base a una condizione

$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 );
        // Rimuove il ruolo
        $u->remove_role( 'student' );

        // Aggiunge il ruolo
        $u->add_role( 'adult' );
    }
}
29 ott 2012 20:42:32
Commenti

Penso che il tuo utilizzo di $blogID sia sbagliato. get_users() utilizzerà comunque l'ID del blog corrente per impostazione predefinita.

fuxia fuxia
29 ott 2012 21:27:25

sì, nel mio caso l'incollato era solo da un esempio multisito. Non l'ho definito neanche qui quindi ovviamente avrebbe generato un errore.

Adam Munns Adam Munns
26 nov 2012 19:46:06
0
<?php
$wuser_ID = get_current_user_id();
if ($wuser_ID)
    {
      // NOTA: Ovviamente sostituisci 3 con l'ID utente appropriato
      $u = new WP_User( $wuser_ID );

      // Rimuovi ruolo
      $u->remove_role( 'subscriber' );

      // Aggiungi ruolo
      $u->add_role( 'contributor' );
    }
?>
7 ago 2017 05:13:50
0

Puoi modificare il ruolo di qualsiasi utente modificando il profilo dell'utente. Non è necessario aggiungere altro codice quando questa opzione è già integrata in WordPress.

Modifica ruolo utente in WordPress

Oppure

Puoi utilizzare del codice per cambiare tutti gli utenti attuali con il ruolo di sottoscrittore in editor:

$current_user = wp_get_current_user();

// Rimuovi ruolo
$current_user->remove_role( 'subscriber' );

// Aggiungi ruolo
$current_user->add_role( 'editor' );
16 apr 2015 10:03:04
2

C'è una funzione WordPress per quello!

Penso sia meglio utilizzare le funzioni di WordPress, quando e se sono disponibili.

Puoi usare la funzione wp_insert_user(), dove uno degli argomenti che dovrai fornire è $userdata['role']. In questo argomento puoi specificare il ruolo in cui vuoi cambiare l'utente.

1 dic 2010 13:16:58
Commenti

wp non riconosce quella funzione. Ho ricevuto un errore "funzione non definita".

Joann Joann
1 dic 2010 13:42:12

A quanto pare, wp_insert_user() sembra fare esattamente la stessa cosa. Quando forniscil'ID, quell'ID viene aggiornato. Se non c'è ID aggiunge un nuovo utente. Non so ancora quale sia la differenza tra wp_update_user() e wp_insert_user().

Coen Jacobs Coen Jacobs
1 dic 2010 13:46:33
0

devi includere il file /wp-includes/registration.php, se usi il codice come script autonomo. Saluti Uwe

22 dic 2010 16:50:19
0

Puoi utilizzare wp_update_user. Il tuo codice dovrebbe essere così:

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

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

    if ( is_wp_error( $result ) ) {
        // Si è verificato un errore, probabilmente l'utente non esiste.
    } else {
        // Successo!
    }
?>
9 nov 2016 13:17:52
0

So che è un post molto vecchio, ma ho scoperto che i ruoli degli utenti sono memorizzati nella tabella wp_usermeta con la chiave wp_capabilities nella colonna meta_key.

Se vuoi cambiare il ruolo di un utente puoi farlo con questa semplice funzione.

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

Ci sono due modi per utilizzare questa funzione.

Se vuoi cambiare il ruolo con un singolo ruolo.

change_role(2, 'editor'); // editor è il nuovo ruolo

Oppure se vuoi aggiungere più ruoli all'utente, utilizza i ruoli come array nel secondo parametro.

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

Buona fortuna.

28 mar 2019 00:24:41