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

如何在WooCommerce REST API的line_items中添加含常规价格的meta_data

在WooCommerce REST API的line_items中获取常规价格的解决方案

要在REST API返回的line_items里拿到商品常规价格并判断折扣,单独用wc_add_order_item_meta没用是因为它只负责存储元数据,但REST API默认不会返回自定义元数据,且得确保元数据在订单创建时就被正确写入。下面是两种可行方案:

方案1:保存订单创建时的常规价格快照(推荐)

这种方式会在订单生成时,把当时的商品常规价格存为订单项元数据,后续API返回的是订单创建时的原价,不受商品后续价格变动影响。

1.1 写入常规价格到订单项

用woocommerce_checkout_create_order_line_item钩子在订单创建流程中写入元数据:

add_action('woocommerce_checkout_create_order_line_item', 'save_order_item_regular_price_snapshot', 10, 4);
function save_order_item_regular_price_snapshot($item, $cart_item_key, $values, $order) {
    $product = $values['data'];
    $regular_price = $product->get_regular_price();
    // 用下划线前缀隐藏元数据(前台不显示)
    $item->update_meta_data('_regular_price_snapshot', $regular_price);
}

1.2 修改REST API响应添加字段

用woocommerce_rest_prepare_order_line_item钩子把保存的元数据加入API返回结果:

add_filter('woocommerce_rest_prepare_order_line_item', 'expose_regular_price_in_rest', 10, 3);
function expose_regular_price_in_rest($response, $item, $request) {
    $regular_price = $item->get_meta('_regular_price_snapshot');
    if (!empty($regular_price)) {
        $response->data['regular_price'] = $regular_price;
        // 直接添加折扣判断字段
        $response->data['has_discount'] = (float)$regular_price > (float)$item->get_total();
    }
    return $response;
}

方案2:实时获取商品当前常规价格

如果不需要订单创建时的快照,而是想拿到商品最新的常规价格,可直接在API响应时查询产品数据:

add_filter('woocommerce_rest_prepare_order_line_item', 'add_live_regular_price_to_rest', 10, 3);
function add_live_regular_price_to_rest($response, $item, $request) {
    $product = wc_get_product($item->get_product_id());
    if ($product) {
        $regular_price = $product->get_regular_price();
        $response->data['regular_price'] = $regular_price;
        $response->data['has_discount'] = (float)$regular_price > (float)$item->get_total();
    }
    return $response;
}

注意事项

  • 方案1需要重新创建订单测试,历史订单不会自动补存元数据;方案2无需创建新订单,直接生效。
  • 避免在外部直接调用wc_add_order_item_meta,订单创建钩子能确保每个订单项都被正确处理,不会遗漏。
  • 字段添加后,调用订单详情API(如GET /wp-json/wc/v3/orders/{id})就能在line_items数组里看到regular_price和has_discount字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:00:53