2017-12-19 32 views
1

일부 내부 코딩에 따라 가격 계산 방법을 업데이트하는 방법을 알고 싶습니다. 이것은 장바구니 품목에 들어가야하는 가격이며, 장바구니 품목에는 제품의 기본 비용 만 표시됩니다.Woocommerce - 사용자 정의 카트 항목 가격 계산

기술적으로 가격은 제품을 장바구니에 추가 할 때 변경해야합니다. 이 트릭을하지 않기 때문에

global $woocommerce; 
$items = $woocommerce->cart->get_cart(); 

foreach($items as $item => $values) { 
    if ($value['product_id'] == $product_id) { 
     $value['data']->set_price($price); 
    } 
} 

어디에/내가 set_price() 함수를 둘 필요가 수행 할 때

나는이 같은 calulated해야했다 생각. 이것이 호출되면 카트는 여전히 비어 있고 루프는 입력되지 않습니다.

$ this-> price가 설정되어 있지 않고 get_base_cost가 호출되어 "recalculated"가격이 아닌 기본 비용 만 표시되는 것과 같이 Woocommerce Bookings에 문제가있는 것 같습니다. 그것이 예약 가능한 제품이기 때문에 이것은 더 까다로운 것으로 보인다. $이 자세히 보면

public function get_price($context = ‘view’) { 
    return apply_filters('woocommerce_get_price', $this->price ? $this->price : $this->get_base_cost(), $this); 
} 

나는 적어도 300은 "기본 비용"250 지불해야하는 재 계산 된 가격입니다 class_wc_product_booking 내에서 모두 가격을 볼 수 있습니다.

이 문제와 관련이없는 많은 배열을 삭제했습니다.

WC_Product_Booking Object ( 
[availability_rules:WC_Product_Booking:private] => Array () 
[object_type:protected] => product 
[post_type:protected] => product 
[cache_group:protected] => products 
[data:protected] => 
    Array ( 
     [name] => Booking Test 
     [slug] => Booking Test 
     [sku] => 
     [price] => 300 
     [regular_price] => 
     [sale_price] => 
     [rating_counts] => Array () 
     [average_rating] => 0 
     [review_count] => 0 
    ) 
[supports:protected] => Array () 
[id:protected] => 1708 
[changes:protected] => Array ([price] => 250) 
[meta_data:protected] => 
[product_type] => booking 
) 

답변

2

이 작업은 수행 후크 woocommerce_before_calculate_totals에서 수행해야합니다. 어떤 플러그인 파일도

add_action('woocommerce_before_calculate_totals', 'custom_cart_item_price', 10, 1); 
function custom_cart_item_price($cart) { 

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

    foreach ($cart->get_cart() as $cart_item){ 
     $price = $cart_item['data']->get_price(); // Get the product price 
     $new_price = $price + 30; // the calculation 
     $cart_item['data']->set_price($new_price); // Set the new price 
    } 
} 

이 코드는 활성 자식 테마 (또는 테마)의 function.php 파일에 간다 나 : 작업이 카트 항목에서 각 제품 가격에 30을 추가 예를 아래에.


$woocommerce->cartglobal $woocommerce; 대신 WC()->cart로 대체되었다. 예 다음 두 개의 후크 아래가 많은에게

add_filter('woocommerce_add_cart_item' , 'set_woo_prices'); 
add_filter('woocommerce_get_cart_item_from_session', 'set_session_prices', 20 , 3); 

function set_woo_prices($woo_data) { 
    session_start();  
    $tac_dd_discounted_price = $_SESSION['']; // get the updated new price field 

    if (! isset($tac_dd_discounted_price) || empty ($tac_dd_discounted_price)) { return $woo_data; } 
    $woo_data['data']->set_price($tac_dd_discounted_price); 
    $woo_data['my_price'] = $tac_dd_discounted_price; 
    return $woo_data; 
} 

function set_session_prices ($woo_data , $values , $key) { 
    if (! isset($woo_data['my_price']) || empty ($woo_data['my_price'])) { return $woo_data; } 
    $woo_data['data']->set_price($woo_data['my_price']); 
    return $woo_data; 
} 
+0

도움이 될 것입니다 세션으로 전송해야하는 경우 – achiever

+1

@achiever이 코드는 매우 고전적입니다 (거기에 많은 답변이 있으므로) ... 관련 계산 코드로 질문을 업데이트하는 것이 더 좋을 수도 있습니다 ... 우리는 어디서 어떻게 당신은 이것을 실제로 만들고 있습니다. 이렇게하면 우리가 더 잘 당신을 도울 수 있습니다. 또한 사용중인 WooCommerce 버전과 관련된 정보를 제공해야합니다. ** Aakanksh Patel **의 새로운 답변도 잘 작동합니다. – LoicTheAztec

+0

코드가 작동한다고 확신합니다! 그것은 "나의"가격을 아직 바꾸지는 못하지만 많은 이유가있을 수 있습니다. Woocommerce v. 3.2.5 – achiever

1

당신은 쇼핑 카트에 전송하기 전에 가격 사용자 정의 방식을 변경하려고 나는 functions.php에 코드를 복사 카트 가격이 전혀 변하지 않았습니까? 또한 양식에 따라 가격 계산을하고 있는데 custom_cart_item_price 함수 내에 해당 가격이 필요합니까?