在Woocommerce中更改购物车产品价格

时间:2016-11-23 02:45:33

标签: php wordpress woocommerce hook-woocommerce

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

我用Google搜索了解决方案并使用了相同的方法:

以下是代码示例:

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');

当Woocommerce计算购物车的小计时,它总是会添加应该是免费的产品的原始价格。例如,当我将3美元的商品添加到购物车时,购物车小计最终会以400美元而非300美元结束。

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

无论如何使用hooks / apis而不是编辑Woocommerce核心文件来解决这个问题?

1 个答案:

答案 0 :(得分:0)

我找到了这个错误的罪魁祸首。它是由另一个名为Woocommerce Role Based Price的插件的冲突引起的。此插件会在购物车总计算流程结束时覆盖购物车商品价格。这就是get_price()函数始终返回项目的指定价格的原因。

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