wp_insert_user rol no funciona
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

// 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.

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.

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

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.
