2016-05-23 71 views
2

我正在使用woocommerce_before_calculate_totals在woocommerce中添加额外的价格。如果您在购物车中添加产品并选择了价格,则总价在结帐时是正确的,但是如果客户在同一流程中创建了自己的帐户并结帐,那么在付款后价格会增加两次。这是我的代码woocommerce_before_calculate_totals挂钩不能正常工作

function calculate_gift_wrap_fee($cart_object) { 
$additionalPrice = 100; 
foreach ($cart_object->cart_contents as $key => $value) { 
if(isset($value["gift_wrap_fee"])) { 
$orgPrice = floatval($value['data']->price); 
$value['data']->price = ($orgPrice + $additionalPrice); 
     } 

} 

} 

请帮

回答

1

如果客户选择在当时结账Create Account选项,woocommerce调用以重新计算车总计揭示(客户账户后注册并自动记录它们)calculate_totals()秒时间在注册前没有任何基于角色的折扣。

所以你可以做的是检查"reload_checkout"会话,这将在第二次调用calculate_totals()之前设置。

所以更新calculate_gift_wrap_fee这样

function calculate_gift_wrap_fee($cart_object) { 
    if(!WC()->session->__isset("reload_checkout")) { 
     /* Gift wrap price */ 
     $additionalPrice = 100; 
     foreach ($cart_object->cart_contents as $key => $value) { 
      if(isset($value["gift_wrap_fee"])) { 
       $orgPrice = floatval($value['data']->price); 
       $value['data']->price = ($orgPrice + $additionalPrice); 
      } 
     } 
    } 
} 
add_action('woocommerce_before_calculate_totals', 'calculate_gift_wrap_fee', 99); 
+0

是它现在的工作,但是我测试,如果有任何问题,我会联系你。谢谢。 – tst2016