web-dev-qa-db-fra.com

le rôle wp_insert_user ne fonctionne pas

J'ai essayé cette journée, mais cela ne fonctionne pas. Comment puis-je définir un rôle pour l'utilisateur actuel que j'insère avec la fonction wp_insert_user()

$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 );
5
The Beast
$WP_array = 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,
    ) ;

    $id = wp_insert_user( $WP_array ) ;

    wp_update_user( array ('ID' => $id, 'role' => 'editor') ) ;

Puisque vous recherchez des solutions qui fonctionnent, celle-ci devrait fonctionner, et ce n’est que le candidat à la solution utile. Je pense que ce n’est peut-être pas la meilleure solution, peut-être même pas proche, mais cela devrait fonctionner.

3
prosti

Après avoir approfondi et vérifié ma fin, j'ai trouvé que ce script fonctionnerait très bien.

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

Pourtant, il n'y a rien de mystérieux dans ce script. On dirait que les rôles doivent utiliser des minuscules, et vous devez blâmer cette fonction, que j'ai trouvée après des jours d'analyse.

/wp-includes/class-wp-roles.php
284:    /**
285:     * Whether role name is currently in the list of available roles.
286:     *
287:     * @since 2.0.0
288:     * @access public
289:     *
290:     * @param string $role Role name to look up.
291:     * @return bool
292:     */
293:    public function is_role( $role ) {

Vous pouvez vérifier vous-même si vous écrivez un code comme celui-ci dans functions.php.

$r = new WP_Roles();
var_dump("editor", $r->is_role("editor"));
var_dump("Editor", $r->is_role("Editor"));
die();

Vous obtiendrez le résultat final comme ceci.

string(6) "editor" bool(true) string(6) "Editor" bool(false) 

Cela signifie que la editor pour le nom du rôle est OK et que la Editor n'est pas OK.

Nous devons noter que si vous définissez un rôle vide tel que 'role' => "", vous ne définissez aucun rôle (comme @TheBeast expérimenté à la première place avec Editor nom où aucun rôle n'a été défini à la fin).

D'autre part, si vous omettez la clé 'role', votre utilisateur prendra le rôle par défaut. Le rôle par défaut est généralement la editor, mais il vous appartient de le personnaliser, car vous pouvez obtenir ces informations via get_option('default_role'), et définissez-le via la fonction set_option.

Dans le passé, j'ai trouvé des indications selon lesquelles le code de @TheBeast fonctionnerait réellement. ( https://wordpress.org/support/topic/wp_insert_user-function-user-roles?replies=3 )

Ce qui est réellement important pour nous, c’est un processus d’ajout de rôles. Vous pouvez écrire comme:

add_action( 'init', 'plugin_add_role');
function plugin_add_role( 'reviewer', 'Reviewer', $caps );

Ici, vos capacités $caps ressemblent à quelque chose comme:

$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,
    );

Vous pouvez en savoir plus sur les fonctionnalités dans le codex https://codex.wordpress.org/Roles_and_Capabilities .

3
prosti