You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Wordpress中使用PHP筛选特定角色用户的实现方法

实现WordPress仅展示指定角色用户列表的修改方案

修改逻辑

WordPress 中用户角色存储在用户对象的roles属性中,我们只需要在组装返回数据前增加角色判断,过滤掉非目标角色的用户即可,该方案对PHP新手友好,修改量小不易出错。
你只需要在原有代码的foreach循环中,拿到$wp_user对象后增加一段角色校验逻辑即可,完整修改后的代码如下:

public function get_recipients_list() {
    global $wpdb;

    // 从POST请求拉取用户列表
    try {
        $this->_is_user_logged_in();
    } catch ( Exception $error ) {
        wp_send_json_error( $error->getMessage() );
    }

    // @TODO: nonce校验
    // 搜索用户至少需要输入一个字符
    $search_query = "SELECT a.ID, a.user_nicename, a.display_name, b.meta_value as block_list
                        FROM {$wpdb->users} a LEFT join {$wpdb->usermeta} b
                        ON a.ID = b.user_id AND b.meta_key = '_ml_user_block_list'";

    if ( ! empty( $_POST['term'] ) ) {
        $search_term = $wpdb->esc_like( wp_kses_data( $_POST['term'] ) )  . '%';
        $search_query .= $wpdb->prepare(
            " WHERE ( a.user_login LIKE %s OR a.user_nicename LIKE %s OR a.display_name LIKE %s )",
                $search_term,
                $search_term,
                $search_term
            );
    } elseif ( ! empty( $_POST['user_id'] ) ) {
        $search_query .= $wpdb->prepare( ' WHERE a.ID = %d ', absint( $_POST['user_id'] ) );
    }

    $offset = 0;
    if ( isset( $_POST['offset'] ) && intval( $_POST['offset'] ) ) {
        $offset = absint( $_POST['offset'] );
    }

    $search_query .= " LIMIT $offset, $this->recipient_search_limit";
    $users = $wpdb->get_results( $search_query );

    if ( ! $users ) {
        wp_send_json_success([]);
    }

    $return_list = [];
    // 定义允许展示的角色列表,可自行修改调整
    $allowed_roles = ['agents', 'customers'];

    foreach ( $users as $user ) {
        $user_block_list = maybe_unserialize( $user->block_list );

        // 被拉黑用户或用户本人不加入返回列表
        if ( $user->ID == $this->sender->ID || $user_block_list && in_array( $this->sender->ID, (array) $user_block_list ) ) {
            continue;
        }

        $wp_user = get_user_by('ID', $user->ID );
        // 新增角色过滤逻辑,不在允许列表的用户直接跳过
        if( empty( array_intersect( $wp_user->roles, $allowed_roles ) ) ) {
            continue;
        }

        $return_list[ $user->ID ] = [
            'id'     => $user->ID,
            'login'  => $wp_user->user_login,
            'name'   => wp_specialchars_decode( $user->display_name ? $user->display_name : $user->user_nicename ),
            'avatar' => get_avatar( $user->ID ) ?: '',
            'uri'    => esc_url( ( new User( $user->ID ) )->get_link() ),
            'blocked'=> false,
            'seckey' => wp_create_nonce("block-user-{$user->ID}")
        ];
    }

    wp_send_json_success( $return_list );
}

补充说明

  • 常规用户量级的站点使用上述方案性能完全够用,无需额外调整SQL逻辑
  • 如果后续需要新增或删减可展示的角色,直接修改$allowed_roles数组内的角色slug即可

内容的提问来源于stack exchange,提问作者msk285

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:57:03