¿Cómo cambiar la función de un usuario?

32

Tengo funciones personalizadas en mi configuración y quiero 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? Cuando agregamos 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 esta va a hacer:

$wp_user_object = new WP_User($current_user->ID);
$wp_user_object->set_role('editor');
    
pregunta Joann 01.12.2010 - 10:42

8 respuestas

45

Consulte la WP_User class , 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, así que estoy agregando más información a continuación.

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

Ejemplo

Cambiar el rol de un suscriptor al 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' );

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

    
respondido por el t31os 01.12.2010 - 12:09
14

Solo tenga en cuenta que hay una forma más sencilla de cambiar la función del usuario, lo cual 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' );
    
respondido por el Philipp 14.06.2015 - 16:38
3

Para extrapolar en la respuesta de t31os, puedes pegar algo así en tu archivo de funciones si quieres 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' );
    }
}
    
respondido por el Adam Munns 29.10.2012 - 19:42
2

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

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' );
    
respondido por el Brad Dalton 16.04.2015 - 09:03
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 utilizar la función wp_insert_user () , donde uno de los argumentos que deberá proporcionar es el $ userdata ['role']. En este argumento, puede especificar el rol en el que desea cambiar al usuario.

    
respondido por el Coen Jacobs 01.12.2010 - 12:16
1

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

    
respondido por el Uwe 22.12.2010 - 15:50
1

Puede usar wp_update_user . Tu 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!
    }
?>
    
respondido por el Nour Edin Al-Habal 09.11.2016 - 12:17
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' );
    }
?>
    
respondido por el Wasim Khan 07.08.2017 - 04:13

Lea otras preguntas en las etiquetas