programing

WordPress가 특정 기능을 가진 사용자를 나열하는 방법

minimums 2023. 10. 30. 20:52
반응형

WordPress가 특정 기능을 가진 사용자를 나열하는 방법

"publish_posts"와 같이 특정 기능을 가진 사용자만 나열할 수 있는 방법이 있습니까?

WP는 기능을 user_meta 테이블에 직렬화된 문자열로 저장하므로 특정 기능을 가진 사용자를 선택하려면 meta_query 매개 변수와 함께 WP_User_Query를 사용할 수 있습니다.또한 사용자 메타에서 다중 사이트 설치 기능 이름을 사용할 수 있는 가용성으로 인해 wp_table_prefix_capabilities처럼 보입니다.

global $wpdb;
// meta-key name
$capabilities_field_name=$wpdb->prefix.'capabilities';
//array as argument for our query
$qargs=[
     'role' => ['Customer'], // use this if you need to query by role at the same time
     'meta_query'=>
         [
            'relation' => 'OR', // optional if you'll need to select more than
                                //  one capability just add this and create same array
                               // as down below describing what are you looking for 
             [
                'key' => $capabilities_field_name,
                'value' => 'your_role_name',
                'compare' => 'LIKE',
             ],

       // here could be same array [key,value,compare]... as above with another capability      
       // but you'll need to add extra argument showing relationship between them see above 'relation parameter'

         ],
     'number'=> -1 // to select all users
 ];

$usersQuery=new WP_User_Query($qargs); // instantiate UserQuery with $qargs

$users=$usersQuery->get_results(); // get all results as array of WPUser objects

누군가에게 도움이 되기를 바랍니다:) 참고 [vars]는 배열(vars)로 대체될 수 있습니다. [] 짧은 구문을 좋아하지만 php 5.4부터만 지원됩니다.

모든 사용자를 검색하면 됩니다.그 다음에 각각의 앞다리로 그것들을 뒤집니다.사용자가 특정 기능을 가지고 있는지 확인한 다음 사용자를 다른 배열로 밀어 넣은 후 해당 배열을 사용하여 나열합니다.

$all_users = get_users();
$specific_users = array();

foreach($all_users as $user){

    if($user->has_cap('specific_capability')){
        $specific_users[] = $user;
    }

}

참고: 그 당시에는 빠르고 더러운 해결책인 것처럼 보였지만, 지금은 질문을 작성하는 것을 추천합니다.제가 이 문제를 조사할 시간이 없기 때문에, 만약 반대표를 던진 사람이 문의자에게 실질적인 도움이 되는 답변을 반대표를 던지지 않고 이 질문에 답을 해준다면 좋을 것 같습니다.

WP_User_Query로 사용자를 나열할 수 있지만, 사용 권한이 아닌 다른 역할만 반환할 수 있는 경우에는 이미 원하는 역할일 수 있습니다!워드프레스 문서에서 다양한 역할을 볼 수 있는 사이트도 있습니다.

먼저 해당 기능이 포함된 모든 역할을 받아야 합니다.그런 다음 해당 기능이 포함된 역할을 기준으로 사용자를 검색할 수 있습니다.

$roles = array();
foreach ( wp_roles()->roles as $role_name => $role_obj ) {
    if ( ! empty( $role_obj['capabilities']['my_capability_name'] ) ) {
        $roles[] = $role_name;
    }
}

$users = get_users( array( 'role__in' => $roles ) );
  • 다른 역할에 해당 기능에 대한 "거부"가 있고 사용자가 여러 역할을 포함할 수 있는 경우에는 이를 설명하지 않습니다.그렇다면 사용자를 루프할 때 "user_can()" 조건도 추가해야 합니다.https://developer.wordpress.org/reference/functions/user_can/

언급URL : https://stackoverflow.com/questions/7695609/how-wordpress-can-list-users-with-specific-capabilities

반응형