Como mudar a função de um usuário?

32

Tenho funções personalizadas na minha configuração e quero poder alterar automaticamente a função de um usuário por meio de uma função. Digamos que o usuário A tenha uma função SUBSCRIBER, como altero para EDITOR? Ao adicionar um papel nós apenas:

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

Que tal mudar um papel? Existe algo como:

change_role($old_role, $new_role);

UPDATE: Eu acho que isso vai fazer:

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

8 respostas

45

Consulte a classe WP_User , você pode usar isso para adicionar e remover funções de um usuário.

EDIT: Eu realmente deveria ter fornecido mais informações com essa resposta inicialmente, então estou adicionando mais informações abaixo.

Mais especificamente, a função de um usuário pode ser definida criando uma instância da classe WP_user e chamando os métodos add_role() ou remove_role() .

Exemplo

Alterar uma função de inscritos para o 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 isso seja mais útil do que a minha resposta inicial, o que não é necessariamente útil.

    
por t31os 01.12.2010 / 12:09
fonte
14

Apenas observe que há uma maneira mais simples de alterar a função do usuário, o que é especialmente útil quando você não conhece a função atual do usuário: ->set_role()

Exemplo:

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

// Replace the current role with 'editor' role
$u->set_role( 'editor' );
    
por Philipp 14.06.2015 / 16:38
fonte
3

Para extrapolar na resposta do t31os, você pode colocar algo assim em seu arquivo de funções, se quiser fazer isso programaticamente, com base em uma condição

$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' );
    }
}
    
por Adam Munns 29.10.2012 / 19:42
fonte
2

Você pode alterar a função de qualquer usuário editando o perfil dos usuários. Não é necessário adicionar mais código quando esta opção já estiver incorporada no WordPress.

Ou

Você pode usar o código para alterar todos os usuários atuais com a função de assinante para o editor:

$current_user = wp_get_current_user();

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

// Add role
$current_user->add_role( 'editor' );
    
por Brad Dalton 16.04.2015 / 09:03
fonte
1

Há uma função do WordPress para isso!

Acho que é melhor usar as funções do WordPress, se e quando estiverem disponíveis.

Você pode usar a função wp_insert_user () , onde um dos argumentos que você precisará fornecer é o $ userdata ['role']. Neste argumento, você pode especificar a função para a qual você deseja alterar o usuário.

    
por Coen Jacobs 01.12.2010 / 12:16
fonte
1

você tem que incluir o /wp-includes/registration.php, se você usar o código como um script independente. Saudações Uwe

    
por Uwe 22.12.2010 / 15:50
fonte
1

Você pode usar wp_update_user . Seu código deve ser assim:

<?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!
    }
?>
    
por Nour Edin Al-Habal 09.11.2016 / 12:17
fonte
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' );
    }
?>
    
por Wasim Khan 07.08.2017 / 04:13
fonte

Tags