Jak zmienić rolę użytkownika?

34

W mojej konfiguracji mam niestandardowe role i chcę móc automatycznie zmieniać rolę użytkownika za pomocą funkcji. Powiedz, że użytkownik A pełni rolę SUBSKRYBENTA. Jak zmienić go na EDYTOR? Dodając rolę po prostu:

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

Co powiesz na zmianę roli? Czy istnieje coś takiego:

change_role($old_role, $new_role);

AKTUALIZACJA: Myślę, że ten zrobi:

$wp_user_object = new WP_User($current_user->ID);
$wp_user_object->set_role('editor');
Joann
źródło

Odpowiedzi:

50

Zobacz klasę WP_User , możesz jej użyć do dodawania i usuwania ról dla użytkownika.

EDYCJA: Naprawdę powinienem był na początku podać więcej informacji z tą odpowiedzią, więc dodaję więcej informacji poniżej.

Mówiąc dokładniej, rolę użytkownika można ustawić, tworząc instancję klasy WP_user i wywołując metody add_role()lub remove_role().

Przykład

Zmień rolę subskrybentów na edytor

// 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' );

Mam nadzieję, że jest to bardziej pomocne niż moja początkowa odpowiedź, która niekoniecznie była tak pomocna.

t31os
źródło
remove_role()i add_rule()zapisać dane w bazie danych?
b_dubb
18

Należy pamiętać, że istnieje prostszy sposób zmiany roli użytkownika, co jest szczególnie przydatne, gdy nie znasz bieżącej roli użytkownika: ->set_role()

Przykład:

// 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
źródło
Pamiętaj, że set_role usunie poprzednie role użytkownika i przypisze nową rolę.
shasi kanth
1
Jest to idealne rozwiązanie dla niestandardowych formularzy rejestracyjnych. Najpierw zarejestruj użytkowników bez ról, a następnie dodaj rolę po potwierdzeniu wiadomości e-mail.
Ivijan Stefan Stipić,
3

Aby ekstrapolować odpowiedź t31os, możesz uderzyć coś takiego w pliku funkcji, jeśli chcesz to zrobić programowo w oparciu o warunek

$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
źródło
Myślę, że twoje użycie $blogIDjest niewłaściwe. get_users()i tak użyje bieżącego ID bloga.
fuxia
tak, w moim przypadku pasta była tylko przykładem z wielu stron. Nie zdefiniowałem tego tutaj tak wyraźnie, że spowodowałoby to błąd.
Adam Munns,
2

Możesz zmienić rolę dowolnego użytkownika, edytując profil użytkowników. Nie trzeba dodawać żadnego kodu, jeśli ta opcja jest już wbudowana w WordPress.

wprowadź opis zdjęcia tutaj

Lub

Możesz użyć kodu, aby zmienić wszystkich obecnych użytkowników z rolą subskrybenta na edytor:

$current_user = wp_get_current_user();

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

// Add role
$current_user->add_role( 'editor' );
Brad Dalton
źródło
1

Jest do tego funkcja WordPress!

Myślę, że najlepiej używać funkcji WordPress, jeśli i kiedy są one dostępne.

Możesz użyć funkcji wp_insert_user () , gdzie jednym z argumentów, które musisz podać, jest $ userdata ['rola]. W tym argumencie możesz określić rolę, w którą chcesz zmienić użytkownika.

Coen Jacobs
źródło
wp nie rozpoznaje tej funkcji. Wystąpił błąd „niezdefiniowana funkcja”.
Joann
Wygląda na to, że wp_insert_user () wydaje się robić dokładnie to samo. Gdy podasz identyfikator, zostanie on zaktualizowany. Brak identyfikatora dodaje nowego użytkownika. Nie wiem jeszcze, jaka jest różnica między wp_update_user () a wp_insert_user ().
Coen Jacobs,
1

musisz dołączyć /wp-include/registration.php, jeśli używasz kodu jako samodzielnego skryptu. Pozdrawiam Uwe


źródło
1

Możesz użyć wp_update_user . Twój kod powinien wyglądać następująco:

<?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
źródło
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
źródło
0

Wiem, że to bardzo stary post, ale odkryłem, że role użytkowników są przechowywane w wp_usermetatabeli z kluczem wp_capabilitiesw meta_keykolumnie.

Jeśli chcesz zmienić rolę użytkownika, możesz to zrobić za pomocą tej prostej funkcji.

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);
}

Istnieją dwa sposoby korzystania z tej funkcji.

Jeśli chcesz zmienić rolę dla pojedynczej roli.

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

Lub jeśli chcesz dodać wiele ról do użytkownika, użyj roli jako tablicy w drugim parametrze.

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

Powodzenia.

Mohammed Alhanafi
źródło