사용자 역할을 변경하는 방법은 무엇입니까?


34

설정에 사용자 지정 역할이 있으며 기능을 통해 사용자의 역할을 자동으로 변경할 수 있기를 원합니다. 사용자 A에게 SUBSCRIBER 역할이 있다고 가정하면 EDITOR로 어떻게 변경합니까? 역할을 추가 할 때 우리는 단지 :

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

역할 변경은 어떻습니까? 다음과 같은 것이 있습니까?

change_role($old_role, $new_role);

업데이트 : 나는 이것이 할 것이라고 생각합니다 :

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

답변:


50

WP_User 클래스를 참조하십시오. 이를 사용하여 사용자의 역할을 추가 및 제거 할 수 있습니다.

편집 : 나는 처음 에이 답변에 더 많은 정보를 제공해야 했으므로 아래에 더 많은 정보를 추가하고 있습니다.

보다 구체적으로, WP_user 클래스의 인스턴스를 작성하고 add_role()또는 remove_role()메소드를 호출하여 사용자의 역할을 설정할 수 있습니다 .

구독자 역할을 편집자로 변경

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

다행히도 초기 응답보다 도움이 되었기 때문에 도움이되지는 않았습니다.


remove_role()add_rule()데이터베이스에 데이터를 저장?
b_dubb

18

사용자의 현재 역할을 모르는 경우 특히 유용한 사용자 역할을 변경하는 간단한 방법이 있습니다. ->set_role()

예:

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

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

set_role은 사용자의 이전 역할을 제거하고 새 역할을 할당합니다.
shasi kanth 12

1
이것은 맞춤 등록 양식에 적합합니다. 먼저 역할이없는 사용자를 등록한 후 이메일을 확인할 때 역할을 추가하십시오.
Ivijan Stefan Stipić

3

t31os의 대답을 외삽하기 위해 조건에 ​​따라 프로그래밍 방식으로 수행하려는 경우 함수 파일에서 이와 같은 것을 때릴 수 있습니다.

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

귀하의 사용법 $blogID이 잘못되었다고 생각합니다 . get_users()어쨌든 기본적으로 현재 블로그 ID를 사용합니다.
fuxia

예, 제 경우에는 페이스트가 여러 사이트에서 나온 것입니다. 여기에 그것을 정의하지 않았으므로 분명히 오류가 발생합니다.
Adam Munns

2

사용자 프로파일을 편집하여 모든 사용자의 역할을 변경할 수 있습니다. 이 옵션이 WordPress에 이미 내장되어 있으면 더 이상 코드를 추가 할 필요가 없습니다.

여기에 이미지 설명을 입력하십시오

또는

코드를 사용하여 구독자 역할을 가진 모든 현재 사용자를 편집자로 변경할 수 있습니다.

$current_user = wp_get_current_user();

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

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

1

이를위한 워드 프레스 기능이 있습니다!

가능하면 워드 프레스 기능을 사용하는 것이 가장 좋다고 생각합니다.

wp_insert_user () 함수를 사용할 수 있습니다 . 여기서 제공해야 할 인수 중 하나는 $ userdata [ 'role']입니다. 이 인수에서 사용자를 변경하려는 역할을 지정할 수 있습니다.


wp가 해당 기능을 인식하지 못합니다. "정의되지 않은 함수"오류가 발생했습니다.
Joann

wp_insert_user ()는 똑같이하는 것처럼 보입니다. ID를 제공하면 해당 ID가 업데이트됩니다. 새로운 사용자를 추가하는 ID가 없습니다. wp_update_user ()와 wp_insert_user ()의 차이점이 무엇인지 아직 모르십시오.
Coen Jacobs

1

코드를 독립형 스크립트로 사용하는 경우 /wp-includes/registration.php를 포함해야합니다. 감사합니다


1

wp_update_user 를 사용할 수 있습니다 . 코드는 다음과 같습니다.

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

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

0

나는 매우 오래된 게시물을 알고 있지만 사용자의 역할은 wp_usermetawp_capabilitiesmeta_key열로 테이블에 저장되어 있음을 알았습니다 .

사용자 역할을 변경하려면이 간단한 기능으로 수행 할 수 있습니다.

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

이 기능을 사용하는 두 가지 방법이 있습니다.

단일 역할의 역할을 변경하려는 경우

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

또는 사용자에게 다중 역할을 추가하려면 두 번째 매개 변수에서 역할을 배열로 사용하십시오.

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

행운을 빕니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.