Cum se modifică rolul unui utilizator?

1 dec. 2010, 11:42:55
Vizualizări: 131K
Voturi: 54

Am roluri personalizate în configurația mea și vreau să pot schimba automat rolul unui utilizator printr-o funcție. Să zicem că utilizatorul A are rol de SUBSCRIBER (Abonat), cum îl schimb în EDITOR? Când adăugăm un rol folosim:

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

Dar cum procedăm pentru schimbarea unui rol? Există ceva de genul:

change_role($old_role, $new_role);

ACTUALIZARE: Cred că aceasta va funcționa:

$wp_user_object = new WP_User($current_user->ID);
$wp_user_object->set_role('editor');
0
Toate răspunsurile la întrebare 9
4
73

Consultați clasa WP_User, pe care o puteți utiliza pentru a adăuga și elimina roluri unui utilizator.

Mai exact, rolul unui utilizator poate fi modificat prin crearea unei instanțe a clasei WP_User și apelarea metodelor add_role, remove_role sau set_role, în funcție de cerințele dumneavoastră.

Exemplu

Eliminarea rolului de subscriber, apoi adăugarea rolului de editor.

// Asigurați-vă că ajustați `3` la un ID de utilizator corespunzător
$u = new WP_User( 3 );

// Elimină rolul
$u->remove_role( 'subscriber' );

// Adaugă rolul
$u->add_role( 'editor' );

Metodele de adăugare și eliminare sunt probabil cele mai potrivite pentru cazurile în care utilizatorilor li se atribuie mai multe roluri.

Dacă scopul dumneavoastră este pur și simplu să schimbați un rol, acest lucru se poate face mai ușor folosind metoda set_role, astfel:

// Asigurați-vă că ajustați `10` la un ID de utilizator corespunzător
$u = new WP_User( 10 );

// Schimbă rolul
$u->set_role( 'author' );

Sper că vă este de folos.

1 dec. 2010 13:09:35
Comentarii

remove_role() și add_rule() salvează date în baza de date?

b_dubb b_dubb
29 oct. 2019 23:42:16

Da @b_dubb, ambele metode salvează în baza de date prin metoda update_user_meta() aici. Vezi add_role() aici și remove_role() aici

Gonçalo Figueiredo Gonçalo Figueiredo
7 ian. 2020 14:58:11

Este destul de util. Mulțumesc.

b_dubb b_dubb
7 ian. 2020 23:07:07

set_role() va elimina toate rolurile și va adăuga rolul specificat într-o singură comandă

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

Rețineți că există o modalitate mai simplă de a schimba rolul utilizatorului, care este utilă mai ales atunci când nu cunoașteți rolul curent al utilizatorului: ->set_role()

Exemplu:

// Obține obiectul WP_User al utilizatorului nostru.
$u = new WP_User( 3 );

// Înlocuiește rolul curent cu rolul de 'editor'
$u->set_role( 'editor' );
14 iun. 2015 17:38:42
Comentarii

Ține minte că set_role va elimina rolurile anterioare ale utilizatorului și va atribui noul rol.

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

Aceasta este perfectă pentru formularele personalizate de înregistrare. Mai întâi înregistrează utilizatorii fără roluri și apoi adaugă rolul când își confirmă adresa de email.

Ivijan Stefan Stipić Ivijan Stefan Stipić
15 sept. 2017 20:34:20
2

Pentru a extinde răspunsul lui t31os, puteți adăuga ceva de genul acesta în fișierul dvs. de funcții dacă doriți să faceți acest lucru programatic în funcție de o condiție.

$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 );
        // Elimină rolul
        $u->remove_role( 'student' );

        // Adaugă rolul
        $u->add_role( 'adult' );
    }
}
29 oct. 2012 20:42:32
Comentarii

Cred că folosirea lui $blogID este greșită. get_users() va folosi implicit ID-ul blogului curent oricum.

fuxia fuxia
29 oct. 2012 21:27:25

da, în cazul meu exemplul era doar dintr-un multisite. Nu l-am definit nici aici, așa că evident că ar da eroare.

Adam Munns Adam Munns
26 nov. 2012 19:46:06
0
<?php
$wuser_ID = get_current_user_id();
if ($wuser_ID)
    {
      // NOTĂ: Desigur, schimbați 3 cu ID-ul utilizatorului corespunzător
      $u = new WP_User( $wuser_ID );

      // Elimină rolul
      $u->remove_role( 'subscriber' );

      // Adaugă rolul
      $u->add_role( 'contributor' );
    }
?>
7 aug. 2017 05:13:50
0

Puteți schimba rolul oricărui utilizator prin editarea profilului acestuia. Nu este nevoie să adăugați cod suplimentar, deoarece această opțiune este deja integrată în WordPress.

Schimbarea rolului utilizatorului în WordPress

Sau

Puteți folosi cod pentru a schimba toți utilizatorii cu rolul de abonat în editori:

$current_user = wp_get_current_user();

// Elimină rolul
$current_user->remove_role( 'subscriber' );

// Adaugă rolul
$current_user->add_role( 'editor' );
16 apr. 2015 10:03:04
2

Există o funcție WordPress pentru asta!

Cred că cel mai bine este să folosești funcțiile WordPress, atunci când acestea sunt disponibile.

Poți folosi funcția wp_insert_user(), unde unul dintre argumentele pe care va trebui să le furnizezi este $userdata['role']. În acest argument poți specifica rolul în care dorești să schimbi utilizatorul.

1 dec. 2010 13:16:58
Comentarii

WordPress nu recunoaște acea funcție. Am primit o eroare "funcție nedefinită".

Joann Joann
1 dec. 2010 13:42:12

Din câte se pare, wp_insert_user() pare să facă exact același lucru. Când furnizezi un ID, acel ID este actualizat. Dacă nu există ID, se adaugă un utilizator nou. Încă nu știu exact care este diferența dintre wp_update_user() și wp_insert_user().

Coen Jacobs Coen Jacobs
1 dec. 2010 13:46:33
0

trebuie să incluzi fișierul /wp-includes/registration.php, dacă folosești codul ca un script independent. Cu stimă, Uwe

22 dec. 2010 16:50:19
0

Puteți folosi wp_update_user. Codul vostru ar trebui să arate astfel:

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

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

    if ( is_wp_error( $result ) ) {
        // A apărut o eroare, probabil utilizatorul nu există.
    } else {
        // Succes!
    }
?>
9 nov. 2016 13:17:52
0

Știu că este un post foarte vechi, dar am descoperit că rolurile utilizatorilor sunt stocate în tabelul wp_usermeta cu cheia wp_capabilities în coloana meta_key.

Dacă dorești să schimbi rolul unui utilizator, poți face acest lucru prin această funcție simplă.

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

Există două moduri de a utiliza această funcție.

Dacă dorești să schimbi rolul pentru un singur rol.

change_role(2, 'editor'); // editor este noul rol

Sau, dacă dorești să adaugi mai multe roluri utilizatorului, folosește rolurile ca array în al doilea parametru.

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

Succes.

28 mar. 2019 00:24:41