wp_insert_user ruolo non funziona - Soluzione
Sto provando tutto il giorno ma non funziona, come posso impostare un ruolo per l'utente corrente che sto inserendo con la funzione wp_insert_user()
$userdata = array(
'user_login' => $username, // Nome utente
'user_email' => $email, // Email utente
'user_pass' => $password, // Password
'user_url' => $website, // Sito web
'first_name' => $first_name, // Nome
'last_name' => $last_name, // Cognome
'nickname' => $nickname, // Soprannome
'description' => $bio, // Biografia
'role' => 'Editor' // Ruolo (non funziona)
);
$user = wp_insert_user( $userdata ); // Inserisce l'utente

$WP_array = array (
'user_login' => $username, // Nome utente per l'accesso
'user_email' => $email, // Indirizzo email dell'utente
'user_pass' => $password, // Password per l'account
'user_url' => $website, // Sito web personale
'first_name' => $first_name, // Nome dell'utente
'last_name' => $last_name, // Cognome dell'utente
'nickname' => $nickname, // Soprannome
'description' => $bio, // Biografia/descrizione
) ;
// Inserisce un nuovo utente nel database WordPress
$id = wp_insert_user( $WP_array ) ;
// Aggiorna il ruolo dell'utente appena creato a 'editor'
wp_update_user( array ('ID' => $id, 'role' => 'editor') ) ;
Poiché stai cercando soluzioni funzionanti, questa dovrebbe funzionare, ed è solo una delle possibili risposte utili. Sono consapevole che questa potrebbe non essere la soluzione migliore, forse nemmeno vicina, ma dovrebbe funzionare.

Ho copiato e incollato questo codice da https://wordpress.org/support/topic/wp_insert_user-does-not-apply-to-roles?replies=3, lo modificherò per adattarlo alle tue esigenze.

Se hai ulteriori domande, per favore crea una nuova domanda, non è corretto nei confronti di prosti espandere indefinitamente l'ambito. La domanda non menziona nulla riguardo all'appartenenza a s1. @prosti puoi modificare la tua risposta per spiegare cosa hai fatto? Incollare codice non è una risposta e non aiuta l'OP a capire qual era il problema

In realtà ho aggiunto un'altra risposta a causa del tuo feedback @TomJNowell

Dopo aver approfondito e verificato personalmente, ho scoperto che questo script funzionerà perfettamente.
$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 );
Tuttavia, non c'è nulla di misterioso in questo script. Sembra che i ruoli debbano essere scritti in minuscolo, e la colpa è di questa funzione, che ho scoperto dopo giorni di analisi.
/wp-includes/class-wp-roles.php
284: /**
285: * Verifica se il nome del ruolo è presente nell'elenco dei ruoli disponibili.
286: *
287: * @since 2.0.0
288: * @access public
289: *
290: * @param string $role Nome del ruolo da cercare.
291: * @return bool
292: */
293: public function is_role( $role ) {
Puoi verificare personalmente scrivendo questo codice nel file functions.php
.
$r = new WP_Roles();
var_dump("editor", $r->is_role("editor"));
var_dump("Editor", $r->is_role("Editor"));
die();
Otterrai un risultato finale come questo.
string(6) "editor" bool(true) string(6) "Editor" bool(false)
Ciò significa che editor
come nome del ruolo è accettabile, mentre Editor
non lo è.
È importante notare che se si imposta un ruolo vuoto come 'role' => ""
il risultato sarà che non verrà assegnato alcun ruolo (come ha sperimentato @TheBeast inizialmente con il nome Editor
, dove alla fine non è stato impostato alcun ruolo).
D'altra parte, se si omette la chiave 'role'
, all'utente verrà assegnato il ruolo predefinito. Il ruolo predefinito è solitamente editor
, ma può essere personalizzato poiché tale informazione può essere ottenuta tramite get_option('default_role')
e impostata tramite la funzione set_option
.
In passato ho trovato indicazioni che il codice di @TheBeast avrebbe effettivamente funzionato. (https://wordpress.org/support/topic/wp_insert_user-function-user-roles?replies=3)
Ciò che è realmente importante per noi è il processo di aggiunta dei ruoli. Puoi scrivere così:
add_action( 'init', 'plugin_add_role');
function plugin_add_role( 'reviewer', 'Reviewer', $caps );
Qui le tue $caps
(capacità) sono qualcosa come:
$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,
);
Puoi leggere di più sulle capacità nel codex https://codex.wordpress.org/Roles_and_Capabilities.
