wp_insert_user rolul nu funcționează - Soluții și explicații
Am încercat toată ziua dar nu funcționează. Cum pot seta un rol pentru utilizatorul pe care îl inserez cu funcția wp_insert_user()
?
$userdata = array(
'user_login' => $username, // Numele de utilizator
'user_email' => $email, // Adresa de email
'user_pass' => $password, // Parola
'user_url' => $website, // Site web
'first_name' => $first_name, // Prenume
'last_name' => $last_name, // Nume de familie
'nickname' => $nickname, // Pseudonim
'description' => $bio, // Descriere
'role' => 'Editor' // Rolul utilizatorului
);
$user = wp_insert_user( $userdata ); // Inserare utilizator

$WP_array = array (
'user_login' => $username, // Numele de utilizator
'user_email' => $email, // Adresa de email
'user_pass' => $password, // Parola
'user_url' => $website, // Site web
'first_name' => $first_name, // Prenume
'last_name' => $last_name, // Nume de familie
'nickname' => $nickname, // Pseudonim
'description' => $bio, // Biografie
) ;
$id = wp_insert_user( $WP_array ) ; // Inserează utilizatorul
wp_update_user( array ('ID' => $id, 'role' => 'editor') ) ; // Actualizează rolul la editor
Deoarece cauți soluții funcționale, aceasta ar trebui să funcționeze și este doar un răspuns util candidat. Sunt conștient că aceasta poate să nu fie cea mai bună soluție, poate nici măcar apropiată, dar ar trebui să funcționeze.

Am copiat acest cod de la https://wordpress.org/support/topic/wp_insert_user-does-not-apply-to-roles?replies=3, îl voi modifica pentru a se potrivi nevoilor tale.

Dacă aveți întrebări suplimentare, vă rugăm să creați o întrebare nouă, nu este corect față de prosti să extindeți sfera la infinit. Întrebarea nu menționează nimic despre calitatea de membru s1. @prosti poți să editezi răspunsul tău pentru a explica ce ai făcut? Copierea și lipirea codului nu este un răspuns și nu ajută OP să înțeleagă care a fost problema

de fapt am adăugat un alt răspuns datorită feedback-ului tău @TomJNowell

După o analiză mai profundă și verificări pe partea mea, am descoperit că acest script va funcționa perfect.
$userdata = array(
'user_login' => $username,
'user_email' => $email,
'user_pass' => $password,
'user_url' => $website,
'first_name' => $first_name,
'last_name' => $last_name,
'nickname' => $nickname,
'description' => $bio,
'role' => 'editor'
);
$user = wp_insert_user( $userdata );
Totuși, nu este nimic misterios în acest script. Se pare că rolurile trebuie să fie scrise cu litere mici, iar problema trebuie atribuită acestei funcții, pe care am găsit-o după zile de analiză.
/wp-includes/class-wp-roles.php
284: /**
285: * Verifică dacă numele rolului există în lista de roluri disponibile.
286: *
287: * @since 2.0.0
288: * @access public
289: *
290: * @param string $role Numele rolului de verificat.
291: * @return bool
292: */
293: public function is_role( $role ) {
Puteți verifica singuri dacă scrieți codul următor în functions.php
.
$r = new WP_Roles();
var_dump("editor", $r->is_role("editor"));
var_dump("Editor", $r->is_role("Editor"));
die();
Veți obține următorul rezultat:
string(6) "editor" bool(true) string(6) "Editor" bool(false)
Aceasta înseamnă că editor
pentru numele rolului este corect, în timp ce Editor
nu este acceptat.
Trebuie să notăm că dacă setați un rol gol, astfel: 'role' => ""
, acest lucru va rezulta în neatribuirea vreunui rol (așa cum a experimentat @TheBeast inițial cu numele Editor
, când în final nu a fost setat niciun rol).
Pe de altă parte, dacă omiteți cheia 'role'
, utilizatorul va primi rolul implicit. Rolul implicit este de obicei editor
, dar acest lucru poate fi personalizat, deoarece informația poate fi obținută prin get_option('default_role')
și setată prin funcția set_option
.
În trecut, am găsit indicații că codul lui @TheBeast ar fi funcționat. (https://wordpress.org/support/topic/wp_insert_user-function-user-roles?replies=3)
Ceea ce este cu adevărat important pentru noi este procesul de adăugare a rolurilor. Puteți scrie astfel:
add_action( 'init', 'plugin_add_role');
function plugin_add_role( 'reviewer', 'Reviewer', $caps );
Aici, $caps
reprezintă capabilitățile, care arată cam așa:
$caps = array(
'read' => true,
'edit_posts' => true,
'edit_others_posts' => true,
'edit_private_posts' => true,
'edit_published_posts' => true,
'read_private_posts' => true,
'edit_pages' => true,
'edit_others_pages' => true,
'edit_private_pages' => true,
'edit_published_pages' => true,
'read_private_pages' => true,
);
Puteți citi mai multe despre capabilități în codex: https://codex.wordpress.org/Roles_and_Capabilities.
