如何过滤WooCommerce REST API返回订单中的指定meta_data字段?
解决WooCommerce REST API返回数据过大导致Zapier无法接收的问题
针对你遇到的Fancy Product Designer插件在订单line_items的meta_data中携带base64格式PNG图片(key为_fpd_product_thumbnail),导致API返回数据超7MB被Zapier拒收的问题,可以通过WooCommerce的REST API钩子过滤响应数据,在不影响内部使用的前提下移除该字段的传输。
直接在主题的functions.php文件或自定义插件中添加以下代码:
add_filter('woocommerce_rest_prepare_shop_order_object', 'filter_fpd_thumbnail_from_api_response', 10, 3); function filter_fpd_thumbnail_from_api_response($response, $order, $request) { // 获取订单的line items数据 $line_items = $response->get_data()['line_items']; // 遍历每个商品项,过滤指定meta字段 foreach ($line_items as &$item) { $item['meta_data'] = array_filter($item['meta_data'], function($meta) { return $meta['key'] !== '_fpd_product_thumbnail'; }); } // 更新响应数据 $response->set_data(array_merge($response->get_data(), ['line_items' => $line_items])); return $response; }
代码说明
- 钩子
woocommerce_rest_prepare_shop_order_object会在WooCommerce准备订单API响应时触发,专门用于修改返回的响应内容 - 仅过滤API返回的meta_data字段,不会删除数据库中存储的
_fpd_product_thumbnail数据,完全不影响内部业务使用 - 通过
array_filter精准移除目标字段,其余订单数据保持原样输出
添加代码后,再通过Zapier拉取订单时,响应数据将不再包含这个大体积的base64图片字段,数据量会大幅降低,即可正常被Zapier接收。
内容的提问来源于stack exchange,提问作者BTB
相关产品推荐
相关产品推荐

