You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce REST API v2:向订单添加自定义数据遇问题

解决WooCommerce升级后REST API自定义数据不显示的问题

我完全懂你遇到的困扰——升级WooCommerce到3.3+版本后,原来依赖旧Legacy API的woocommerce_api_order_response钩子突然失效,自定义数据不再出现在API响应里。这其实是因为新版WooCommerce的REST API已经彻底切换到基于WordPress原生REST API的架构,和旧版API的运行逻辑完全不同了。

为什么旧钩子没用了?

WooCommerce 2.x的旧API(也就是你用的wc-api/v3端点)是一套独立的系统,woocommerce_api_order_response是专门为这套旧系统设计的钩子。而3.0+版本启用的新REST API(wp-json/wc/v2及后续版本)是基于WP REST API构建的,它有自己专属的过滤器和钩子体系,旧钩子自然不会被触发。

正确的解决方案:使用新REST API的专属过滤器

你需要改用针对新REST API订单响应的过滤器woocommerce_rest_prepare_shop_order来添加自定义数据,下面是具体的代码示例:

add_filter( 'woocommerce_rest_prepare_shop_order', 'add_custom_data_to_order_rest_response', 10, 3 );
function add_custom_data_to_order_rest_response( $response, $order, $request ) {
    // 替换成你实际存储自定义数据的元键
    $custom_data = get_post_meta( $order->get_id(), 'your_custom_meta_key', true );
    
    // 将自定义数据添加到API响应中,可自定义键名
    $response->data['custom_order_data'] = $custom_data;
    
    // 如果要添加多个字段,重复上述步骤即可
    // $response->data['another_custom_field'] = get_post_meta( $order->get_id(), 'another_meta_key', true );
    
    return $response;
}

代码使用说明:

  • 把这段代码添加到你的主题functions.php文件,或者自定义插件中
  • 替换your_custom_meta_key为你实际用来存储自定义数据的元键
  • custom_order_data是你希望在API响应中显示的键名,可以根据需求自由修改

验证方法

保存代码后,调用新的API端点https://example.com/wp-json/wc/v2/orders?consumer_key=KEY&consumer_secret=SECRET,查看返回的订单数据,你添加的自定义字段应该已经出现在响应里了。

如果你的自定义数据不是存在订单的post meta中,只需要调整代码里获取数据的逻辑即可——比如从订单的其他属性、自定义表中读取数据,再添加到$response->data数组里就好。

内容的提问来源于stack exchange,提问作者Ian Fraser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:18:13