wp_insert_user rolul nu funcționează - Soluții și explicații

19 apr. 2016, 01:57:08
Vizualizări: 18K
Voturi: 7

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
0
Toate răspunsurile la întrebare 3
6
$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.

19 apr. 2016 02:12:28
Comentarii

te rog să explici codul tău

The Beast The Beast
19 apr. 2016 02:13:27

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.

prosti prosti
19 apr. 2016 02:15:58

dar dacă vreau să fie un nivel 1 s2member

The Beast The Beast
19 apr. 2016 02:26:46

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

Tom J Nowell Tom J Nowell
19 apr. 2016 06:16:45

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

prosti prosti
12 mai 2016 02:48:08

@TheBeast: De fapt, nivelurile de membru sunt descurajate, acum ar trebui să folosești capabilități. Am oferit câteva sfaturi despre asta în al doilea meu răspuns.

prosti prosti
14 mai 2016 19:57:53
Arată celelalte 1 comentarii
0

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.

12 mai 2016 02:47:33
0

folosește doar litere mici și underscore între cuvinte pentru roluri, în loc de spațiu

'role' => 'Editor'           ------->    'role' => 'editor'

'role' => 'Shop manager'     ------->    'role' => 'shop_manager'
31 aug. 2021 15:52:25