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