如何借助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
相关产品推荐
相关产品推荐

