wp_insert_user ruolo non funziona - Soluzione

19 apr 2016, 01:57:08
Visualizzazioni: 18K
Voti: 7

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
0
Tutte le risposte alla domanda 3
6
$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.

19 apr 2016 02:12:28
Commenti

per favore spiega il tuo codice

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

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.

prosti prosti
19 apr 2016 02:15:58

ma cosa succede se voglio che sia un livello 1 s2member

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

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

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

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

prosti prosti
12 mag 2016 02:48:08

@TheBeast: In realtà i livelli di membro sono sconsigliati, ora dovresti usare le capability. Ho fornito alcuni suggerimenti a riguardo nella mia seconda risposta.

prosti prosti
14 mag 2016 19:57:53
Mostra i restanti 1 commenti
0

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.

12 mag 2016 02:47:33
0

utilizza solo lettere minuscole e il simbolo & tra due parole per i ruoli, utilizzando l'underscore al posto dello spazio

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

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