通八洲科技

如何在 WooCommerce 订单中正确获取商品重量

日期:2026-01-02 00:00 / 作者:花韻仙語

在 woocommerce 中,订单项(`wc_order_item_product`)对象本身不直接提供 `get_weight()` 方法,需通过关联的商品对象调用 `get_weight()` 才能安全获取重量值。

WooCommerce 的订单结构采用分层设计:订单(WC_Order)包含多个订单项(WC_Order_Item_Product),而每个订单项仅存储交易快照(如购买数量、单价、总金额等),并不直接持有商品的元数据(如重量、尺寸、SKU)。这些属性仍归属于原始商品(WC_Product)对象。

因此,当你在循环中直接调用 $item->get_weight() 时,PHP 会抛出 Fatal error: Call to undefined method WC_Order_Item_Product::get_weight(),因为该方法并不存在于订单项类中。

✅ 正确做法是:先通过 $item->get_product() 获取对应的商品实例(返回 WC_Product 或其子类对象),再调用其 get_weight() 方法:

foreach ($order->get_items() as $item) {
    $product = $item->get_product();
    $weight  = $product ? $product->get_weight() : ''; // 防止商品已删除或不可用

    fputs($file, implode("|", array(
        $item->get_quantity(),
        $item->get_total(),
        $weight,
    )) . PHP_EOL);
}

⚠️ 注意事项:

? 小结:获取订单中商品的重量,本质是“从订单项回溯到原始商品”,这是 WooCommerce 数据快照机制的设计原则。掌握这一逻辑,也能类推解决 get_dimensions()、get_sku()、get_stock_quantity() 等类似需求。