2015-06-09 3 views
0

Привет, мне нужно добавить дополнительную цену к цене товара, а также добавить в корзину. http://url/warenkorb/?add-to-cart=1539&added_price=5.00woocommerce Добавить в корзину

Я использовал код, следующий для его достижения.

add_filter('woocommerce_add_cart_item', 'c_other_options_add_cart_item', 20, 1); 
function c_other_options_add_cart_item($cart_item) { 

    if (isset($cart_item['_other_options'])) : 
     if(isset($cart_item['_other_options']['product-price'])) 
      $extra_cost = floatval($cart_item['_other_options']['product-price']); 

     $cart_item['data']->adjust_price($extra_cost); 
     // here the real adjustment is going on... 

    endif; 

    return $cart_item; 

} 

add_filter('woocommerce_add_cart_item_data', c_other_options_add_cart_item_data', 10, 2); 

function c_other_options_add_cart_item_data($cart_item_meta, $product_id){ 

    global $woocommerce; 

    $product = new WC_Product($product_id); 
    $price = $product->price; 

    if(empty($cart_item_meta['_other_options'])) 
     $cart_item_meta['_other_options'] = array(); 

    $cart_item_meta['_other_options']['product-price'] = esc_attr($_REQUEST['price']) - $price; 

    return $cart_item_meta; 
} 

Показана измененная цена на странице с добавлением на корзину, но не на странице корзины/выписки. Пожалуйста, помогите мне достичь этого. Заранее спасибо.

ответ

1

Вы должны использовать woocommerce_before_calculate_totals крюк для этой цели, как этого

function calculate_extra_fee($cart_object) { 
    /* Extra fee */ 
    $additionalPrice = 100; 
    foreach ($cart_object->cart_contents as $key => $value) {  
     /* if you want to add extra fee for particular product, otherwise remove the if condition */ 
     if($value['product_id'] == 100) { 
      $quantity = intval($value['quantity']); 
      $orgPrice = intval($value['data']->price); 
      $value['data']->price = (($orgPrice + $additionalPrice) * $quantity); 
     }   
    } 
} 
add_action('woocommerce_before_calculate_totals', 'calculate_extra_fee', 1, 1); 

См этого article для более подробной информации

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