SQL User Query by Multiple Roles using PHP

I can successfully get all my WordPress users using the following code:global $wpdb;$sql = 'SELECT * FROM ' .

I can successfully get all my WordPress users using the following code:

global $wpdb;
$sql = 'SELECT * FROM ' . $wpdb->users;
$users = $wpdb->get_results( $sql, 'ARRAY_A' );

However, I need to filter the users with multiple roles (only get "role1" and "role2"). I have tried various methods including the following which does not work:

global $wpdb;
$sql = '
    SELECT ID, display_name FROM wp_users 
    INNER JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.user_id )  
    INNER JOIN wp_usermeta AS mt1 ON ( wp_users.ID = mt1.user_id ) 
    WHERE 1=1 
    AND ( 
      ( 
        ( 
          ( mt1.meta_key = 'wp_capabilities' AND mt1.meta_value LIKE '%role1%' )
        ) 
        AND 
        ( 
          ( 
            ( mt1.meta_key = 'wp_capabilities' AND mt1.meta_value LIKE '%role2%' )
          )
        )
      )
    ) 
    ORDER BY user_login ASC
    ';
$users = $wpdb->get_results( $sql, 'ARRAY_A' );

I can successfully get all my WordPress users using the following code:

global $wpdb;
$sql = 'SELECT * FROM ' . $wpdb->users;
$users = $wpdb->get_results( $sql, 'ARRAY_A' );

However, I need to filter the users with multiple roles (only get "role1" and "role2"). I have tried various methods including the following which does not work:

global $wpdb;
$sql = '
    SELECT ID, display_name FROM wp_users 
    INNER JOIN wp_usermeta ON ( wp_users.ID = wp_usermeta.user_id )  
    INNER JOIN wp_usermeta AS mt1 ON ( wp_users.ID = mt1.user_id ) 
    WHERE 1=1 
    AND ( 
      ( 
        ( 
          ( mt1.meta_key = 'wp_capabilities' AND mt1.meta_value LIKE '%role1%' )
        ) 
        AND 
        ( 
          ( 
            ( mt1.meta_key = 'wp_capabilities' AND mt1.meta_value LIKE '%role2%' )
          )
        )
      )
    ) 
    ORDER BY user_login ASC
    ';
$users = $wpdb->get_results( $sql, 'ARRAY_A' );
Share Improve this question asked Nov 27, 2019 at 22:06 MichaelMichael 2811 silver badge14 bronze badges 3
  • 4 you can do that with the function get_users. – Kaperto Commented Nov 27, 2019 at 22:31
  • Thank you. That worked... – Michael Commented Nov 27, 2019 at 23:03
  • @Kaperto can you post your answer as an answer? – Tom J Nowell Commented Nov 27, 2019 at 23:10
Add a comment  | 

1 Answer 1

Reset to default 2

Taking @Kaperto's advice, I did the following which works:

$user_query = new WP_User_Query( array(
    'role__in'    => ['role1','role2''],
    'orderby' => 'meta_value_num',
    'order' => 'ASC',
) );   
$users = $user_query->get_results();

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744946842a4602670.html

相关推荐

  • SQL User Query by Multiple Roles using PHP

    I can successfully get all my WordPress users using the following code:global $wpdb;$sql = 'SELECT * FROM ' .

    2天前
    50

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信