2017-08-09 42 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