Come cambiare il ruolo di un utente?


34

Ho ruoli personalizzati nella mia configurazione e voglio poter cambiare automaticamente il ruolo di un utente tramite una funzione. Supponiamo che l'utente A abbia un ruolo di ABBONATORE, come posso cambiarlo in EDITOR? Quando si aggiunge un ruolo, basta:

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

Che ne dici di cambiare un ruolo? C'è qualcosa come:

change_role($old_role, $new_role);

AGGIORNAMENTO: Penso che questo farà:

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

Risposte:


50

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

EDIT: Avrei davvero dovuto fornire più informazioni con questa risposta inizialmente, quindi sto aggiungendo ulteriori informazioni di seguito.

Più specificamente, il ruolo di un utente può essere impostato creando un'istanza della classe WP_user e chiamando i metodi add_role()o remove_role().

Esempio

Cambia il ruolo di un abbonato in editor

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

Spero che sia più utile della mia risposta iniziale, che non è stata necessariamente utile.


remove_role()e add_rule()salvare i dati nel database?
b_dubb,

18

Basta notare che esiste un modo più semplice per modificare il ruolo dell'utente, il che è particolarmente utile quando non si conosce il ruolo corrente dell'utente: ->set_role()

Esempio:

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

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

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

1
Questo è perfetto per i moduli di registrazione personalizzati. Prima registra gli utenti senza ruoli e successivamente aggiungi il ruolo quando confermano l'e-mail.
Ivijan Stefan Stipić,

3

Per estrapolare la risposta di t31os puoi dare uno schiaffo nel file delle funzioni se vuoi farlo programmaticamente 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 );
        // Remove role
        $u->remove_role( 'student' );

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

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

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

2

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

inserisci qui la descrizione dell'immagine

O

È possibile utilizzare il codice per modificare tutti gli utenti correnti con il ruolo di abbonato in editor:

$current_user = wp_get_current_user();

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

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

1

C'è una funzione WordPress per questo!

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

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


wp non riconosce quella funzione. Ho ricevuto un errore di "funzione indefinita".
Joann,

A quanto pare, wp_insert_user () sembra fare esattamente lo stesso. Quando si fornisce un ID, tale ID viene aggiornato. Nessun ID sta aggiungendo un nuovo utente. Non so ancora quale sia la differenza tra wp_update_user () e wp_insert_user ().
Coen Jacobs,

1

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


1

Puoi usare 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 ) ) {
        // 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

So che è un post molto vecchio, ma ho scoperto che i ruoli per gli utenti sono memorizzati in una wp_usermetatabella con la chiave wp_capabilitiesnella meta_keycolonna.

Se vuoi cambiare il ruolo 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);
}

Esistono due modi per utilizzare questa funzione.

Se si desidera modificare il ruolo per un singolo ruolo.

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

Oppure, se si desidera aggiungere più ruoli all'utente, utilizzare i ruoli come matrice nel secondo parametro.

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

In bocca al lupo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.