¿Cómo cambiar el rol de un usuario?

1 dic 2010, 11:42:55
Vistas: 131K
Votos: 54

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');
0
Todas las respuestas a la pregunta 9
4
73

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.

1 dic 2010 13:09:35
Comentarios

remove_role() y add_rule() ¿guardan datos en la base de datos?

b_dubb b_dubb
29 oct 2019 23:42:16

Sí @b_dubb, ambos métodos guardan en la base de datos a través del método update_user_meta() aquí. Mira add_role() aquí y remove_role() aquí

Gonçalo Figueiredo Gonçalo Figueiredo
7 ene 2020 14:58:11

Eso es bastante útil. Gracias.

b_dubb b_dubb
7 ene 2020 23:07:07

set_role() eliminará todos los roles y añadirá el rol especificado en un solo comando

G-J G-J
19 abr 2020 01:11:10
2
33

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' );
14 jun 2015 17:38:42
Comentarios

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

shasi kanth shasi kanth
3 may 2016 15:52:07

Esto es perfecto para formularios de registro personalizados. Primero registra usuarios sin roles y después añade el rol cuando confirmen su email.

Ivijan Stefan Stipić Ivijan Stefan Stipić
15 sept 2017 20:34:20
2

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' );
    }
}
29 oct 2012 20:42:32
Comentarios

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

fuxia fuxia
29 oct 2012 21:27:25

sí, en mi caso el código pegado era solo de un ejemplo multisitio. No lo definí aquí tampoco así que obviamente arrojaría un error.

Adam Munns Adam Munns
26 nov 2012 19:46:06
0
<?php
$wuser_ID = get_current_user_id();
if ($wuser_ID)
    {
      // NOTA: Por supuesto, cambia el 3 por el ID de usuario apropiado
      $u = new WP_User( $wuser_ID );

      // Eliminar rol
      $u->remove_role( 'subscriber' );

      // Añadir rol
      $u->add_role( 'contributor' );
    }
?>
7 ago 2017 05:13:50
0

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.

Cambiar rol de usuario 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' );
16 abr 2015 10:03:04
2

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

1 dic 2010 13:16:58
Comentarios

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

Joann Joann
1 dic 2010 13:42:12

Por lo que parece, wp_insert_user() parece hacer exactamente lo mismo. Cuando proporcionas un ID, ese ID se actualiza. Sin ID se añade un nuevo usuario. Todavía no sé cuál es la diferencia entre wp_update_user() y wp_insert_user().

Coen Jacobs Coen Jacobs
1 dic 2010 13:46:33
0

tienes que incluir el /wp-includes/registration.php, si usas el código como un script independiente. Saludos Uwe

22 dic 2010 16:50:19
0

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!
    }
?>
9 nov 2016 13:17:52
0

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.

28 mar 2019 00:24:41