如何将自定义用户元数据暴露到WooCommerce REST API订单端点
WooCommerce REST API暴露自定义用户元数据到订单端点实现方案
register_meta()完全适用于用户元数据场景,你当前用户端点可以正常返回该字段,就是自定义元数据注册生效的表现。订单端点默认仅返回订单基础关联用户字段,不会自动携带自定义用户元,需要通过WooCommerce提供的REST响应过滤器额外注入字段。
你原有用户注册时自动生成secret_key的逻辑无需调整,和下面的配置完全兼容。
步骤1:正确注册用户元数据(可选,未做元数据注册时补充)
用register_meta统一注册用户元,确保REST接口的读写权限统一配置:
// 注册用户自定义元字段到REST API add_action( 'init', function() { register_meta( 'user', 'secret_key', [ 'type' => 'string', 'description' => '用户专属密钥', 'single' => true, 'show_in_rest' => true, // 用户端点能返回字段的核心配置 'auth_callback' => function() { // 按需配置权限,示例为仅拥有编辑用户权限的账号可操作该字段 return current_user_can( 'edit_users' ); } ]); } );
步骤2:注入字段到订单REST API响应
使用woocommerce_rest_prepare_shop_order_object过滤器,在订单接口返回前追加对应下单用户的secret_key字段:
add_filter( 'woocommerce_rest_prepare_shop_order_object', function( $response, $order, $request ) { // 可按需调整生效场景,去掉该判断则所有订单接口请求都会返回该字段 if ( $request->get_param( 'context' ) !== 'view' ) { return $response; } // 获取订单关联的用户ID $user_id = $order->get_customer_id(); if ( $user_id ) { // 读取用户元字段 $secret_key = get_user_meta( $user_id, 'secret_key', true ); // 追加到响应数据 $response->data['customer_secret_key'] = $secret_key; } else { // 游客订单可设为空或者删除该字段 $response->data['customer_secret_key'] = ''; } return $response; }, 10, 3 );
配置完成后访问/wp-json/wc/v3/orders/{订单ID}接口,响应中就会包含customer_secret_key字段,值为对应用户的secret_key元数据。
内容的提问来源于stack exchange,提问作者Jerry
相关产品推荐
相关产品推荐

