Cum se modifică rolul unui utilizator?
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');

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.

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

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

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

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

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

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.

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

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

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