wp_insert_user rol no funciona

19 abr 2016, 01:57:08
Vistas: 18K
Votos: 7

He estado intentando esto todo el día pero no funciona. ¿Cómo puedo establecer un rol para el usuario actual que estoy insertando con la función wp_insert_user()?

$userdata = array(
'user_login'    =>  $username,    // Nombre de usuario
'user_email'    =>  $email,       // Correo electrónico
'user_pass'     =>  $password,    // Contraseña
'user_url'      =>  $website,     // Sitio web
'first_name'    =>  $first_name,  // Nombre
'last_name'     =>  $last_name,   // Apellido
'nickname'      =>  $nickname,    // Apodo
'description'   =>  $bio,         // Biografía
'role' => 'Editor'               // Rol del usuario
);

$user = wp_insert_user( $userdata );  // Insertar el usuario
0
Todas las respuestas a la pregunta 3
6
// Array con los datos del usuario para WordPress
$WP_array = array (
        'user_login'    =>  $username,     // Nombre de usuario
        'user_email'    =>  $email,        // Correo electrónico
        'user_pass'     =>  $password,     // Contraseña
        'user_url'      =>  $website,      // Sitio web
        'first_name'    =>  $first_name,   // Nombre
        'last_name'     =>  $last_name,    // Apellido
        'nickname'      =>  $nickname,     // Apodo
        'description'   =>  $bio,          // Biografía
    ) ;

    // Insertar el usuario en la base de datos de WordPress
    $id = wp_insert_user( $WP_array ) ;

    // Actualizar el rol del usuario recién creado a 'editor'
    wp_update_user( array ('ID' => $id, 'role' => 'editor') ) ;

Si estás buscando soluciones funcionales, esta debería funcionar, y es solo una de las posibles respuestas candidatas. Soy consciente de que puede no ser la mejor solución, quizás ni siquiera cercana, pero debería funcionar.

19 abr 2016 02:12:28
Comentarios

por favor explica tu código

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

Copié y pegué este código de https://wordpress.org/support/topic/wp_insert_user-does-not-apply-to-roles?replies=3, lo modificaré para adaptarlo a tus necesidades.

prosti prosti
19 abr 2016 02:15:58

pero ¿qué pasa si quiero que sea un nivel 1 de s2member?

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

Si tienes preguntas adicionales, por favor crea una nueva pregunta, no es justo para prosti ampliar el alcance indefinidamente. La pregunta no menciona nada sobre la membresía s1. @prosti ¿puedes editar tu respuesta para explicar lo que hiciste? Copiar y pegar código no es una respuesta, y no ayuda al OP a entender cuál era el problema

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

De hecho, agregué otra respuesta debido a tus comentarios @TomJNowell

prosti prosti
12 may 2016 02:48:08

@TheBeast: En realidad, los niveles de membresía están desaconsejados, ahora deberías usar capacidades. Puse algunos consejos sobre eso en mi segunda respuesta.

prosti prosti
14 may 2016 19:57:53
Mostrar los 1 comentarios restantes
0

Después de investigar más a fondo y verificar en mi entorno, descubrí que este script funcionará correctamente.

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

Sin embargo, no hay nada misterioso en este script. Parece que los roles necesitan usar minúsculas, y hay que culpar a esta función, que encontré después de días de análisis.

/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 ) {

Puedes verificarlo tú mismo si escribes código como este en functions.php.

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

Obtendrás un resultado final como este.

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

Esto significa que el nombre de rol editor es válido y Editor no lo es.

Debemos tener en cuenta que si configuras un rol vacío como 'role' => "", esto resultará en no establecer ningún rol (como experimentó @TheBeast inicialmente con el nombre Editor, donde al final no se estableció ningún rol).

Por otro lado, si omites la clave 'role', tu usuario tomará el rol predeterminado. El rol predeterminado suele ser editor, pero depende de ti personalizarlo, ya que esa información puedes obtenerla mediante get_option('default_role') y configurarla con la función set_option.

En el pasado encontré indicios de que el código de @TheBeast podría funcionar. (https://wordpress.org/support/topic/wp_insert_user-function-user-roles?replies=3)

Lo que realmente es importante para nosotros es el proceso de agregar roles. Puedes escribir algo como:

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

Aquí, tus capacidades $caps son algo como:

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

Puedes leer más sobre capacidades en el codex https://codex.wordpress.org/Roles_and_Capabilities.

12 may 2016 02:47:33
0

solo usa minúsculas & en roles de dos palabras usando guión bajo en lugar de espacio

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

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