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

如何在Woocommerce中通过产品ID获取商品变体的采购价格?

在WooCommerce中通过产品ID获取商品变体的采购价格

核心逻辑

WooCommerce里商品变体的采购价格一般以产品元数据形式存储,需先定位到目标可变产品,再提取其下所有变体的对应元数据值。

代码实现

1. 获取指定可变产品下所有变体的采购价格

function get_all_variation_purchase_prices( $parent_product_id ) {
    // 获取父产品对象
    $parent_product = wc_get_product( $parent_product_id );
    
    // 校验是否为有效可变产品
    if ( ! $parent_product || ! $parent_product->is_type('variable') ) {
        return [];
    }
    
    $variation_prices = [];
    // 获取所有可用变体数据
    $available_variations = $parent_product->get_available_variations();
    
    foreach ( $available_variations as $variation_data ) {
        $variation_id = $variation_data['variation_id'];
        $variation = wc_get_product( $variation_id );
        
        // 提取采购价格(元数据键需根据实际配置调整,常见值:_purchase_price、_cost、_wc_cog_cost)
        $purchase_price = $variation->get_meta( '_purchase_price', true );
        
        $variation_prices[$variation_id] = [
            'raw_price' => (float)$purchase_price, // 原始数值,用于计算总额
            'formatted_price' => wc_price( $purchase_price ), // 格式化后价格,用于前端显示
            'attributes' => $variation_data['attributes'] // 变体属性,区分不同规格
        ];
    }
    
    return $variation_prices;
}

2. 通过变体ID直接获取单个变体的采购价格

function get_single_variation_purchase_price( $variation_id ) {
    $variation = wc_get_product( $variation_id );
    
    if ( ! $variation || ! $variation->is_type('variation') ) {
        return false;
    }
    
    // 注意调整元数据键以匹配实际存储字段
    return (float)$variation->get_meta( '_purchase_price', true );
}

关键注意事项

  • 元数据键:不同场景下采购价格的存储键可能不同,比如使用WooCommerce Cost of Goods插件时,键为_wc_cog_cost;如果是自定义添加的采购价格字段,需对应你设置的键值。
  • 总额计算:对比销售与采购总额时,务必使用raw_price的浮点数值,避免格式化后的字符串干扰计算逻辑。
  • 销售数据获取:可通过$product->get_total_sales()获取商品总销量,或结合订单数据统计销售总额,再与采购总额做对比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:15:18