2016-11-23 134 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()函數總是返回指定價格的項目。

現在我只需編輯插件文件,以便它與我的邏輯很好地搭配。

相關問題