如何在WooCommerce REST API订单端点过滤返回数据给商家?
解决WooCommerce REST API返回指定订单字段的方案
要让WooCommerce REST API的订单端点(包括列表和单个订单)仅返回你需要的字段,后端通过钩子截断数据是最稳妥的方式——前端过滤确实存在调试控制台泄露的风险,从API源头控制才是根本解决办法。
直接把下面的代码加到你的主题functions.php文件或者自定义插件里:
add_filter( 'woocommerce_rest_prepare_shop_order', 'filter_rest_order_response_fields', 10, 3 ); function filter_rest_order_response_fields( $response, $order, $request ) { // 提取需要的基础订单字段 $filtered_data = array( 'id' => $response->data['id'], 'order_date' => $response->data['date_created'], 'order_status' => $response->data['status'], 'line_items' => array() ); // 处理订单项,只保留需要的商品信息 foreach ( $response->data['line_items'] as $item ) { $filtered_item = array( 'product_name' => $item['name'], 'quantity' => $item['quantity'], 'variation' => array() ); // 提取商品变体属性,过滤所有定价相关数据 if ( ! empty( $item['meta_data'] ) ) { foreach ( $item['meta_data'] as $meta ) { if ( strpos( $meta['key'], '_price' ) === false && strpos( $meta['key'], 'total' ) === false ) { $filtered_item['variation'][ $meta['key'] ] = $meta['value']; } } } // 移除空的变体字段,避免冗余数据 if ( empty( $filtered_item['variation'] ) ) { unset( $filtered_item['variation'] ); } $filtered_data['line_items'][] = $filtered_item; } // 替换原始响应数据,返回过滤后的内容 $response->data = $filtered_data; return $response; }
代码说明:
- 用
woocommerce_rest_prepare_shop_order钩子拦截API响应,这个钩子同时作用于订单列表和单个订单请求 - 先构建基础字段数组,仅保留
id(对应Order ID)、date_created(Order Date)、status(Order Status) - 遍历订单项
line_items,只提取商品名称、订购数量,以及变体属性(直接过滤掉所有价格类元数据) - 最后替换原始响应数据,确保API返回的只有你指定的内容
验证方式:
调用API端点(比如/wp-json/wc/v3/orders或者/wp-json/wc/v3/orders/{id}),检查返回的JSON结构,确认只包含你需要的字段,没有定价、用户隐私等额外数据。
内容的提问来源于stack exchange,提问作者Saeed Ansari
相关产品推荐
相关产品推荐

