web-dev-qa-db-de.com

Wie ändere ich die Rolle eines Benutzers?

Ich habe benutzerdefinierte Rollen in meinem Setup und möchte in der Lage sein, die Rolle eines Benutzers durch eine Funktion automatisch zu ändern. Angenommen, Benutzer A hat eine ABONNENT-Rolle. Wie ändere ich sie in EDITOR? Wenn wir eine Rolle hinzufügen, tun wir Folgendes:

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

Wie wäre es mit einem Rollenwechsel? Gibt es so etwas wie:

change_role($old_role, $new_role);

UPDATE: Ich denke, das wird tun:

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

Siehe die WP_User-Klasse , mit der Sie Rollen für einen Benutzer hinzufügen und entfernen können.

EDIT: Eigentlich hätte ich mit dieser Antwort mehr Informationen liefern sollen, also füge ich unten weitere Informationen hinzu.

Insbesondere kann die Rolle eines Benutzers festgelegt werden, indem eine Instanz der WP_user-Klasse erstellt und die Methoden add_role() oder remove_role() aufgerufen werden.

Beispiel

Ändern Sie die Rolle eines Abonnenten in einen 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' );

Hoffentlich ist das hilfreicher als meine erste Antwort, die nicht unbedingt so hilfreich war.

48
t31os

Beachten Sie nur, dass es eine einfachere Möglichkeit gibt, die Benutzerrolle zu ändern. Dies ist besonders hilfreich, wenn Sie die aktuelle Rolle des Benutzers nicht kennen: ->set_role()

Beispiel:

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

// Replace the current role with 'editor' role
$u->set_role( 'editor' );
14
Philipp

Um die Antwort von t31os zu extrapolieren, können Sie so etwas in Ihre Funktionsdatei einfügen, wenn Sie dies programmgesteuert basierend auf einer Bedingung tun möchten

$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' );
    }
}
3
Adam Munns

Sie können die Rolle eines Benutzers ändern, indem Sie das Benutzerprofil bearbeiten. Sie müssen keinen weiteren Code hinzufügen, wenn diese Option bereits in WordPress integriert ist.

enter image description here

Oder

Sie können Code verwenden, um alle aktuellen Benutzer mit der Abonnentenrolle zum Editor zu ändern:

$current_user = wp_get_current_user();

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

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

Sie können wp_update_user verwenden. Ihr Code sollte so aussehen:

<?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!
    }
?>
1

Dafür gibt es eine WordPress-Funktion!

Ich denke, es ist am besten, WordPress-Funktionen zu verwenden, wenn und wann sie verfügbar sind.

Sie können die Funktion wp_insert_user () verwenden. Eines der Argumente, die Sie angeben müssen, ist $ userdata ['role']. In diesem Argument können Sie die Rolle angeben, in die Sie den Benutzer ändern möchten.

1
Coen Jacobs

sie müssen die Datei /wp-includes/registration.php einfügen, wenn Sie den Code als eigenständiges Skript verwenden. Grüße Uwe

1
Uwe
<?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' );
    }
?>
0
Wasim Khan

Ich weiß, dass es sich um einen sehr alten Beitrag handelt, aber ich habe festgestellt, dass die Rollen für Benutzer in der Tabelle wp_usermeta mit dem Schlüssel wp_capabilities in der Spalte meta_key gespeichert sind.

Wenn Sie die Benutzerrolle ändern möchten, können Sie dies mit dieser einfachen Funktion tun.

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

Diese Funktion kann auf zwei Arten verwendet werden.

Wenn Sie die Rolle für eine einzelne Rolle ändern möchten.

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

Wenn Sie dem Benutzer mehrere Rollen hinzufügen möchten, verwenden Sie die Rollen als Array im zweiten Parameter.

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

Viel Glück.

0