2016-11-23 137 views
0

我想实现购买3免费1功能,所以我编写了一个脚本,检测客户是否在购物车中有3个相同的商品,并自动将另外1个商品添加到购物车。然后使用另一个钩子,我覆盖产品的价格为0在Woocommerce更改购物车产品价格

我一派溶液和所使用的相同的方法发现:

这里是代码示例:

function setGiftPriceToZero($cart_object){ 
    foreach($cart_object->cart_contents as $k=>$item): 
     if(isset($item['variation']['promo']) && ($item['variation']['promo']) == 'buy 3 free 1'): 
      $item['data']->price = 0; 
     endif; 
    endforeach; 
} 
add_action('woocommerce_before_calculate_totals', 'setGiftPriceToZero'); 

When Woo商业计算分类汇总的车,它总是在添加原价那应该是免费的产品。例如,当我加3 $ 100目到购物车,购物车小计$ 400,而不是300 $结束。

我深入挖掘了Woocommerce代码,发现在https://docs.woocommerce.com/wc-apidocs/source-class-WC_Cart.html#1139中使用了$item['data']->get_price(),它始终返回该商品的原始价格。

有没有办法修复这个使用钩子/ apis而不是编辑Woocommerce核心文件?

回答

0

我发现这个错误的罪魁祸首。它是由被称为Woocommerce Role Based Price另一个插件冲突引起的。这个插件覆盖车项目的价格在车的总金额计算流程结束。这就是为什么get_price()函数总是返回指定价格的项目。

现在我只需编辑插件文件,以便它与我的逻辑很好地搭配。

相关问题