如何通过API导出全部WordPress用户数据?
解决方案
方法1:扩展默认WP REST API用户端点
默认WP REST API的/wp-json/wp/v2/users端点仅返回具备发布内容权限的用户,且不包含Ultimate Member(以下简称UM)的自定义字段。你可以通过代码修改这两个限制:
步骤1:让端点返回所有用户
将以下代码添加到主题的functions.php文件或自定义插件中:
add_filter('rest_user_query', function($query_args, $request) { // 移除默认角色限制,返回全量用户 unset($query_args['role']); // 可选:排除特定用户(比如管理员) // $query_args['exclude'] = array(1); // 替换1为目标用户ID return $query_args; }, 10, 2);
步骤2:附加UM自定义字段到响应结果
继续添加代码,把UM的用户元数据整合到API返回内容里:
add_filter('rest_prepare_user', function($response, $user, $request) { // 获取当前用户的所有UM元数据 $um_meta = get_user_meta($user->ID); // 过滤出UM专属字段(以`um_`为前缀) $um_fields = array_filter($um_meta, function($key) { return str_starts_with($key, 'um_'); }, ARRAY_FILTER_USE_KEY); // 将UM字段加入响应数据 $response->data['um_fields'] = $um_fields; return $response; }, 10, 3);
修改后,使用拥有list_users权限的账号(如管理员)发起请求,就能获取所有用户及对应的UM字段。
方法2:创建自定义REST API端点
如果需要更灵活的数据结构控制,可以自定义一个专属端点:
添加以下代码到主题functions.php或自定义插件:
add_action('rest_api_init', function() { register_rest_route('custom/v1', '/export-users', array( 'methods' => 'GET', 'callback' => 'custom_export_users_endpoint', 'permission_callback' => function() { // 限制仅管理员可访问,可按需调整权限 return current_user_can('manage_options'); } )); }); function custom_export_users_endpoint($request) { // 查询全量用户,可添加过滤条件(如角色、注册时间) $users = get_users(array( 'number' => -1, // 返回所有用户 // 可选:指定要导出的角色 // 'role__in' => array('subscriber', 'um_member'), )); $export_data = array(); foreach($users as $user) { // 基础用户数据 $user_data = array( 'ID' => $user->ID, 'user_login' => $user->user_login, 'user_email' => $user->user_email, 'display_name' => $user->display_name, 'user_registered' => $user->user_registered, 'roles' => $user->roles ); // 加入UM自定义字段 $um_meta = get_user_meta($user->ID); $user_data['um_fields'] = array_filter($um_meta, function($key) { return str_starts_with($key, 'um_'); }, ARRAY_FILTER_USE_KEY); $export_data[] = $user_data; } // 返回JSON格式数据,如需CSV可修改响应头输出对应格式 return rest_ensure_response($export_data); }
添加完成后,访问/wp-json/custom/v1/export-users即可获取包含UM字段的全量用户数据。
注意事项
- API请求需认证,推荐使用WordPress 5.6+支持的应用密码或JWT认证方式,避免直接暴露账号密码。
- 若用户量较大(如上万级),建议在自定义端点中添加
page和per_page参数实现分页,防止单次请求超时。 - 代码修改前请备份站点,避免出现意外问题。
内容的提问来源于stack exchange,提问作者cosmic
相关产品推荐
相关产品推荐

