如何在WordPress中获取当前登录用户所属角色的所有用户?
解决方法
以下是修改后的代码,可自动获取当前登录用户的角色,并筛选出同角色的所有用户,同时优化了下拉菜单的有效性和安全性:
// 获取与当前登录用户同角色的用户 function get_same_role_users() { // 检查用户是否登录 if ( !is_user_logged_in() ) { return '<p>请先登录</p>'; } // 获取当前登录用户对象 $current_user = wp_get_current_user(); // 获取当前用户的角色(若用户拥有多个角色,可根据需求调整取值逻辑) $current_role = $current_user->roles[0]; // 查询同角色用户,可选排除当前用户自身 $user_query = new WP_User_Query( array( 'role' => $current_role, 'exclude' => array( $current_user->ID ) ) ); // 构建下拉菜单HTML $output = '<div id="divuser"><select>'; if ( !empty( $user_query->results ) ) { foreach ( $user_query->results as $user ) { // 用用户ID作为option的value,方便后续业务逻辑使用 $output .= '<option value="' . esc_attr( $user->ID ) . '">' . esc_html( $user->display_name ) . '</option>'; } } else { $output .= '<option value="">暂无同角色用户</option>'; } $output .= '</select></div>'; return $output; } add_shortcode( 'same_role_users', 'get_same_role_users' );
关键改动说明
- 自动获取当前用户角色:移除原函数手动传参逻辑,通过
wp_get_current_user()获取当前登录用户,再提取其角色信息 - 登录状态检查:增加未登录提示,避免未授权访问时出现异常
- 优化下拉菜单结构:补充
<select>标签,原代码仅输出<option>无法形成有效下拉菜单 - 安全优化:使用
esc_attr()和esc_html()对输出内容转义,防止XSS攻击 - 可选排除自身:通过
exclude参数过滤当前登录用户,若需要保留可删除该参数 - 短代码最佳实践:用
return返回HTML内容替代直接echo,避免输出位置错乱
使用方法
在WordPress的文章、页面或自定义模板中插入短代码即可:
[same_role_users]
内容的提问来源于stack exchange,提问作者Masterior
相关产品推荐
相关产品推荐

