2016-05-23 3 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

Смежные вопросы