¿Cómo cambiar el rol de un usuario?

34

Tengo funciones personalizadas en mi configuración y deseo poder cambiar automáticamente la función de un usuario a través de una función. Digamos que el usuario A tiene un rol de SUSCRIPTOR, ¿cómo lo cambio a EDITOR? Al agregar un rol, simplemente:

add_role( $role_name , $role_display_name , array( 'read' =>  true,
                                                   'edit_posts' => false,
                                                   'delete_posts' => false, ));

¿Qué tal cambiar un rol? ¿Hay algo como:

change_role($old_role, $new_role);

ACTUALIZACIÓN: Creo que este hará:

$wp_user_object = new WP_User($current_user->ID);
$wp_user_object->set_role('editor');
Joann
fuente

Respuestas:

50

Vea la clase WP_User , puede usar esto para agregar y eliminar roles para un usuario.

EDITAR: Realmente debería haber proporcionado más información con esta respuesta inicialmente, por lo que agrego más información a continuación.

Más específicamente, el rol de un usuario se puede establecer creando una instancia de la clase WP_user y llamando a los métodos add_role()o remove_role().

Ejemplo

Cambiar el rol de suscriptores a editor

// NOTE: Of course change 3 to the appropriate user ID
$u = new WP_User( 3 );

// Remove role
$u->remove_role( 'subscriber' );

// Add role
$u->add_role( 'editor' );

Espero que sea más útil que mi respuesta inicial, que no fue necesariamente tan útil.

t31os
fuente
remove_role()y add_rule()guardar datos en la base de datos?
b_dubb
18

Solo tenga en cuenta que hay una forma más sencilla de cambiar la función del usuario que es especialmente útil cuando no conoce la función actual del usuario: ->set_role()

Ejemplo:

// Fetch the WP_User object of our user.
$u = new WP_User( 3 );

// Replace the current role with 'editor' role
$u->set_role( 'editor' );
Philipp
fuente
Recuerde que set_role eliminará los roles anteriores del usuario y asignará el nuevo rol.
shasi kanth
1
Esto es perfecto para formularios de registro personalizados. Primero registre usuarios sin roles y luego agregue el rol cuando confirme el correo electrónico.
Ivijan Stefan Stipić
3

Para extrapolar la respuesta de t31os, puede incluir algo como esto en su archivo de funciones si desea hacerlo programáticamente en función de 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 );
        // Remove role
        $u->remove_role( 'student' );

        // Add role
        $u->add_role( 'adult' );
    }
}
Adam Munns
fuente
Creo que tu uso de $blogIDestá mal. get_users()utilizará la ID del blog actual por defecto de todos modos.
fuxia
Sí, en mi caso, la pasta fue solo de un ejemplo multisitio. Tampoco lo definí aquí, así que obviamente arrojaría un error.
Adam Munns
2

Puede cambiar la función de cualquier usuario editando el perfil de los usuarios. No es necesario agregar más código cuando esta opción ya está integrada en WordPress.

ingrese la descripción de la imagen aquí

O

Puede usar el código para cambiar todos los usuarios actuales con el rol de suscriptor a editor:

$current_user = wp_get_current_user();

// Remove role
$current_user->remove_role( 'subscriber' );

// Add role
$current_user->add_role( 'editor' );
Brad Dalton
fuente
1

¡Hay una función de WordPress para eso!

Creo que es mejor usar las funciones de WordPress, siempre y cuando estén disponibles.

Puede usar la función wp_insert_user () , donde uno de los argumentos que deberá proporcionar es $ userdata ['role']. En este argumento, puede especificar la función en la que desea cambiar el usuario.

Coen Jacobs
fuente
wp no reconoce esa función. Recibí un error de "función indefinida".
Joann
Por lo que parece, wp_insert_user () parece hacer exactamente lo mismo. Cuando proporciona una ID, esa ID se actualiza. Ningún ID está agregando un nuevo usuario. Todavía no sé cuál es la diferencia entre wp_update_user () y wp_insert_user ().
Coen Jacobs el
1

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


fuente
1

Puede usar wp_update_user . Su código debería ser así:

<?php
    $user_id = 3;
    $new_role = 'editor';

    $result = wp_update_user(array('ID'=>$user_id, 'role'=>$new_role));

    if ( is_wp_error( $result ) ) {
        // There was an error, probably that user doesn't exist.
    } else {
        // Success!
    }
?>
Nour Edin Al-Habal
fuente
0
<?php
$wuser_ID = get_current_user_id();
if ($wuser_ID)
    {
      // NOTE: Of course change 3 to the appropriate user ID
      $u = new WP_User( $wuser_ID );

      // Remove role
      $u->remove_role( 'subscriber' );

      // Add role
      $u->add_role( 'contributor' );
    }
?>
Wasim Khan
fuente
0

Sé que es un muy antiguo puesto, pero he encontrado que las funciones de los usuarios se almacenan en wp_usermetala tabla con la clave wp_capabilitiesdemeta_key columna.

Si desea cambiar la función del usuario, puede hacerlo con esta sencilla 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 desea cambiar el rol para un solo rol.

change_role(2, 'editor'); // editor is the new role

O si desea agregar roles múltiples al usuario, use los roles como matriz en el segundo parámetro.

$roles_array = array('editor' => true, 'administrator' => true); // roles array
change_role(2, $roles_array);

Buena suerte.

Mohammed Alhanafi
fuente