¿Cómo cambiar el rol de un usuario?
Tengo roles personalizados en mi configuración y quiero poder cambiar automáticamente el rol de un usuario a través de una función. Por ejemplo, si el usuario A tiene un rol de SUSCRIPTOR, ¿cómo lo cambio a EDITOR? Cuando agregamos un rol simplemente hacemos:
add_role( $role_name , $role_display_name , array( 'read' => true,
'edit_posts' => false,
'delete_posts' => false, ));
¿Qué hay sobre cambiar un rol? ¿Existe algo como:
change_role($old_role, $new_role);
ACTUALIZACIÓN: Creo que esto funcionará:
$wp_user_object = new WP_User($current_user->ID);
$wp_user_object->set_role('editor');

Consulta la clase WP_User, puedes usarla para añadir y eliminar roles de un usuario.
Específicamente, el rol de un usuario puede modificarse creando una instancia de la clase WP_User
y llamando a los métodos add_role
, remove_role
o set_role
dependiendo de tus requisitos.
Ejemplo
Eliminar el rol de suscriptor y luego añadir el rol de editor.
// Asegúrate de ajustar `3` a un ID de usuario apropiado
$u = new WP_User( 3 );
// Eliminar rol
$u->remove_role( 'subscriber' );
// Añadir rol
$u->add_role( 'editor' );
Los métodos de añadir y eliminar son probablemente más adecuados para casos de uso donde los usuarios tienen múltiples roles.
Si tu objetivo es simplemente cambiar un rol, esto se puede hacer más fácilmente usando el método set_role
, de esta manera.
// Asegúrate de ajustar `10` a un ID de usuario apropiado
$u = new WP_User( 10 );
// Cambiar rol
$u->set_role( 'author' );
Espero que esto te ayude.

Ten en cuenta que hay una forma más sencilla de cambiar el rol de usuario, lo cual es especialmente útil cuando no conoces el rol actual del usuario: ->set_role()
Ejemplo:
// Obtener el objeto WP_User de nuestro usuario.
$u = new WP_User( 3 );
// Reemplazar el rol actual con el rol 'editor'
$u->set_role( 'editor' );

Recuerda que set_role eliminará los roles anteriores del usuario y asignará el nuevo rol.

Para ampliar la respuesta de t31os, puedes incluir algo como esto en tu archivo de funciones si deseas hacerlo de forma programática basado en una condición
$blogusers = get_users($blogID.'&role=student');
foreach ($blogusers as $user) {
$thisYear = date('Y-7');
$gradYear = date(get_the_author_meta( 'graduation_year', $user->ID ).'-7');
if($gradYear < $thisYear) {
$u = new WP_User( $user->ID );
// Eliminar rol
$u->remove_role( 'student' );
// Agregar rol
$u->add_role( 'adult' );
}
}

Creo que tu uso de $blogID
es incorrecto. get_users()
usará el ID del blog actual por defecto de todos modos.

Puedes cambiar el rol de cualquier usuario editando su perfil. No es necesario añadir más código cuando esta opción ya está integrada en WordPress.
O
También podrías usar código para cambiar todos los usuarios actuales con rol de suscriptor a editores:
$current_user = wp_get_current_user();
// Eliminar rol
$current_user->remove_role( 'subscriber' );
// Añadir rol
$current_user->add_role( 'editor' );

¡WordPress tiene una función para eso!
Creo que es mejor usar las funciones de WordPress, si y cuando están disponibles.
Puedes usar la función wp_insert_user(), donde uno de los argumentos que necesitarás proporcionar es $userdata['role']. En este argumento puedes especificar el rol al que deseas cambiar el usuario.

WordPress no reconoce esa función. Recibí un error de "función no definida".

Puedes usar wp_update_user. Tu código debería verse así:
<?php
$user_id = 3;
$new_role = 'editor';
$result = wp_update_user(array('ID'=>$user_id, 'role'=>$new_role));
if ( is_wp_error( $result ) ) {
// Hubo un error, probablemente el usuario no existe.
} else {
// ¡Éxito!
}
?>

Sé que es una publicación muy antigua, pero he descubierto que los roles de los usuarios se almacenan en la tabla wp_usermeta
con la clave wp_capabilities
en la columna meta_key
.
Si deseas cambiar el rol de usuario puedes hacerlo con esta simple función.
function change_role($id, $new_role){
GLOBAL $table_prefix;
if(is_array($new_role)){
$new_role_array = $new_role;
}else{
$new_role_array = array( $new_role => true );
}
return update_user_meta($id, $table_prefix.'capabilities', $new_role_array);
}
Hay dos formas de usar esta función.
Si deseas cambiar el rol a un único rol.
change_role(2, 'editor'); // editor es el nuevo rol
O si deseas agregar múltiples roles al usuario, usa los roles como array en el segundo parámetro.
$roles_array = array('editor' => true, 'administrator' => true); // array de roles
change_role(2, $roles_array);
Buena suerte.
