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

如何借助Wholesale Suite在WooCommerce中设置产品每磅动态定价?

WooCommerce + Wholesale Suite 实现按磅动态定价方案

核心逻辑

你要的是统一维护每磅单价,让不同包装(桶装/吨装)的产品自动按「磅价×包装重量」计算总价,且调整磅价时所有产品同步更新。核心是用自定义字段存统一磅价,通过代码关联产品重量计算售价,同时兼容Wholesale Suite的批发专属价逻辑。

具体实现步骤

1. 给产品加「每磅单价」自定义字段

在产品编辑页面加一个专属字段,用来设置$2.00/lb这类统一磅价,直接加代码到主题functions.php或者自定义插件里:

// 在产品定价选项区添加每磅单价字段
add_action('woocommerce_product_options_pricing', 'add_per_lb_price_field');
function add_per_lb_price_field() {
    woocommerce_wp_text_input(array(
        'id' => '_per_lb_price',
        'label' => __('每磅单价 ($/lb)', 'woocommerce'),
        'type' => 'number',
        'custom_attributes' => array('step' => '0.01', 'min' => '0'),
        'desc_tip' => true,
        'description' => __('填好后,系统会自动乘以产品重量计算最终售价', 'woocommerce')
    ));
}

// 保存每磅单价字段的值
add_action('woocommerce_process_product_meta', 'save_per_lb_price_field');
function save_per_lb_price_field($post_id) {
    if(isset($_POST['_per_lb_price'])) {
        update_post_meta($post_id, '_per_lb_price', sanitize_text_field($_POST['_per_lb_price']));
    }
}

2. 自动计算产品基础售价

让WooCommerce用「每磅单价×产品重量」替换默认的手动售价,代码如下:

// 动态计算产品常规售价和原价
add_filter('woocommerce_get_price', 'calculate_price_from_per_lb', 10, 2);
add_filter('woocommerce_get_regular_price', 'calculate_price_from_per_lb', 10, 2);
function calculate_price_from_per_lb($price, $product) {
    $per_lb_price = get_post_meta($product->get_id(), '_per_lb_price', true);
    $product_weight = $product->get_weight();
    
    // 只有当磅价和重量都填了才计算,否则用默认价格
    if($per_lb_price && $product_weight) {
        return $per_lb_price * $product_weight;
    }
    return $price;
}

3. 兼容Wholesale Suite的批发专属价

要让批发客户看到的专属价也基于磅价计算,针对Wholesale Suite的核心组件(Wholesale Prices)做适配:

// 适配Wholesale Suite的批发价计算
add_filter('woocommerce_get_price', 'calculate_wholesale_price_from_per_lb', 20, 2);
function calculate_wholesale_price_from_per_lb($price, $product) {
    // 检查当前用户是否是批发客户
    if(function_exists('wc_wholesale_prices_is_user_wholesale_customer') && wc_wholesale_prices_is_user_wholesale_customer()) {
        $per_lb_price = get_post_meta($product->get_id(), '_per_lb_price', true);
        $product_weight = $product->get_weight();
        
        if($per_lb_price && $product_weight) {
            // 获取当前批发角色的折扣率
            $wholesale_role = current(wc_wholesale_prices_get_user_wholesale_roles());
            $discount_rate = wc_wholesale_prices_get_product_wholesale_price($product, $wholesale_role);
            
            // 按「基础总价×(1-折扣率)」计算批发价
            if($discount_rate) {
                return ($per_lb_price * $product_weight) * (1 - $discount_rate/100);
            }
            // 如果需要给不同批发等级设置不同磅价,可再添加一个自定义字段(比如_wholesale_per_lb_price),替换这里的$per_lb_price即可
        }
    }
    return $price;
}

4. 产品配置注意事项

  • 给桶装、吨装分别创建独立产品,在产品编辑页的「重量」栏填准确数值(桶装420,吨装2100);
  • 在新增的「每磅单价」字段填入统一价格(比如2.00),系统会自动算出对应包装的总价;
  • 如果不同批发等级需要不同磅价,重复步骤1添加一个「批发每磅单价」字段,然后在步骤3的代码里替换$per_lb_price为这个新字段的值即可。

为啥不用Weight Based Pricing插件?

这类插件主要是按购物车总重量阶梯定价,和你「固定包装重量×统一磅价」的需求不匹配,而且很难对接Wholesale Suite的专属价钩子,自定义代码更灵活可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 09:47:24