2017-08-09 41 views
1

我的網站使用Woocommerce和Event Ticket插件,並且iive必須硬編碼選擇字段,以便客戶購買票據時根據其選擇的價格將相應地提高。在woocommerce_before_calculate_totals掛鉤中,set_price計算添加了兩次

它的多數似乎工作正常,然後將選擇保存爲購物車數據的一部分。然後,我試圖更新產品價格,一旦他們點擊添加到購物車按鈕,以便它添加到產品價格的新價值。

下面是我已經和這似乎是更新價格,但煩人它添加$pickup_price值的兩倍(所以不是3它增加了6)

奇怪的是,如果我在籃子階段更改數量並更新,它會得到正確的值,而不是最初添加時的數量。

我在做什麼錯誤以及如何防止此問題?

這裏是我的代碼:

add_action('woocommerce_before_calculate_totals', 'add_pickup_cost', 10, 1); 
function add_pickup_cost($cart_object, $cart_item_data) { 

    foreach ($cart_object->get_cart() as $cart_item) { 

      $wc_product = $cart_item['data']; 
      // My custom field which is returning the additional cost 
      $pickup_price = $cart_item['pickupOptions']; 

      $product_price = method_exists($wc_product, 'get_price') ? floatval($wc_product->get_price()) : floatval($wc_product->price); 
      $new_price = $product_price + $pickup_price; 
      method_exists($wc_product, 'set_price') ? $wc_product->set_price($new_price) : $wc_product->price = $new_price; 
    } 
} 

回答

0

你已經錯過了一些小東西,我已經簡化你的代碼一點點:

add_action('woocommerce_before_calculate_totals', 'add_pickup_cost', 10, 2); 
function add_pickup_cost($cart_object) { 

    if (is_admin() && ! defined('DOING_AJAX')) 
     return; 

    foreach ($cart_object->get_cart() as $cart_item) { 
     // WC_Product object instance 
     $wc_product = $cart_item['data']; 

     // Custom field related additional cost 
     $price = ! empty($cart_item['pickupOptions']) ? $cart_item['pickupOptions'] : 0; 

     $price += method_exists($wc_product, 'get_price') ? floatval($wc_product->get_price()) : floatval($wc_product->price); 
     method_exists($wc_product, 'set_price') ? $wc_product->set_price($price) : $wc_product->price = $price; 
    } 
} 

代碼放在你的積極的function.php文件兒童主題(或主題)或任何插件文件。

測試,與增加2倍的價格除了工程(用於WooCommerce 2.5.x版到3+)

+0

的答覆@LocicTheAztec感謝。我嘗試過使用你的代碼,但不幸的是它仍然增加了兩次額外的'pickup選項'值(所以不是增加3英鎊,而是增加6英鎊)。 – WillL

+0

@WillL對於我來說,這段代碼沒有問題。沒有重複...所以可能是某個地方有特定的東西這是造成你的問題。 – LoicTheAztec

+0

@LocicTheAztec奇怪,當我點擊購物車中的「更新購物車」按鈕或刷新購物車時,價格更新爲正確金額。但是從最初的「添加到購物車」中,當它將我的價格再次顯示爲兩倍時。任何想法,爲什麼這可能是一種方式,我可以強制更新/刷新後添加到購物車? – WillL