2014-06-10 4 views
1

장바구니에있는 항목의 가격을 프로그래밍 방식으로 동적으로 변경해야합니다.Woocommerce : 프로그래밍 방식으로 장바구니에있는 항목 업데이트

나는 Woocommerce 액션 후크, 카트 및 세션 개체의 다양한 조합을 시도했지만 아무 것도 그 트릭을 수행하지 않는 것으로 보인다. 나는 이것이 그렇게 도전적이지 않을 것이라고 생각했다. 어떤 도움을 주셔서 감사합니다! 하지만 무기한 : (카트에서 항목을 제거 할 때 후크가 호출됩니다 예)

add_action('woocommerce_before_calculate_totals', 'change_cart_item_price'); 

function change_cart_item_price($cart_object) { 

    foreach ($cart_object->cart_contents as $key => $value) { 

     if(123 == $value['data']->id) { 

      $new_price = function_to_get_new_price($value, get_current_user_id()); 
      $value['data']->price = $new_price; 

     } 

    } 

} 

위의 코드는 체크 아웃 페이지에 각 항목에 대한 가격을 변경하거나 카트를 업데이트 할 때.

Woocommerce Gravity Forms 부가 기능을 사용하고 있습니다. 나는 특정 제품을 가지고 있는데, 이것은 주어진 사용자에 의해 여러 번 주문 될 것이다. 사용자는 배송료 만 5 배로 무료로 제공되며 5 이상은 20 달러입니다. 동적으로 필드를 채우는 Gravity Forms 후크를 사용하여 코딩하고 기능을 많이 갖추고 있습니다. 해운은 중력 양식 내의 필드에만 해당되므로 중력 양식에 계산을 남겨 둡니다.

내 문제는 사용자가 주문에서이 제품의 수량을 줄이면 (카트에서 항목 중 하나를 제거한 경우) 카트 내의 동일한 제품의 각 품목 가격을 다시 계산해야한다는 것입니다. 그들은 ( 6 이제 4 인으로 사용되는 항목,하지만 가격은 안되는 동일하게 유지)를 통해 충전 할 수

따라서, 내가-계산을 다시하고 싶습니다 이 특정 제품의 수량에 따라 장바구니의 각 품목 가격이 카트에서 제거 될 때마다

--- 편집 ---

위의 코드는 작동하지만, 내가 가격을 표시하기 위해 사용하고 사용자 정의 루프해야 문제를 실현 해요 ...

foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) { 
    $_product = $cart_item['data']; 
    if(123 == $_product->post->ID) { 
     $price_not_updated = $cart_item['data']->price; 
    } 
} 
+0

코드가 작동하지 않는 곳은 어디입니까? 우리가 당신이하고있는 것을보고 당신을 도울 수 있다면 최선입니다. – JakeGould

+0

고마워, 제이크. 코드 및 내 문제에 대한 자세한 설명으로 업데이트했습니다. 정말 Woocommerce API 개체 또는 후크를 찾고 있다고 생각합니다. –

+0

이것을 보셨습니까? http://docs.woothemes.com/document/woocommerce-dynamic-pricing/ – JakeGould

답변

0

두 번째 매개 변수를 갖도록 함수를 변경하여 적절한 ID를 호출하는 한 모든 제품에서 동적으로 사용할 수 있습니다. 또한 함수 반환 값을 성공 또는 오류 메시지로 설정합니다. 이 방법은 그것이 변경되었는지, 만약 그렇다면 어떤 가격인지를 알 수 있습니다. 희망이 도움이됩니다. 그런데 카트를 업데이트 할 때이 함수를 다시 호출하면 재 계산 문제가 해결됩니다. $ function_to_get_new_price() 함수에 대한 코드를 볼 수 있다면 좋을 것입니다.

add_action('woocommerce_before_calculate_totals', 'change_cart_item_price'); 

function change_cart_item_price($id, $cart_object) { 

    foreach ($cart_object->cart_contents as $key => $value) { 

     if($id == $value['data']->id) { 

      $new_price = function_to_get_new_price($value, get_current_user_id()); 
      $value['data']->price = $new_price; 

      $successMsg = "The price of item $value['data']->id was set to $value['data']->price".; 
      return $successMsg; 

     }else{ 
      $errorMsg = "Price was not changed!"; 
      return $errorMsg; 
     } 
    } 
} 
+0

음 ... 여기에는 변화가 없습니다. –

0

나는 그것을 알아 냈다 ... 나는 woocommerce cart 문서를보고 근본적으로 내가 얻고있는 가격이 아직 계산되지 않았다는 것을 깨달았다. 따라서 루프를 실행하기 전에 가격을 변경하기 위해 처음에 시도했던 작업을 수행해야했습니다.

도움 주셔서 감사합니다.

function getUpdatedCartPrices() { 

    do_action('woocommerce_before_calculate_totals', WC()->cart); 

    $horray_updated_prices_works = array(); 

    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) { 
     $_product = $cart_item['data']; 
     if(123 == $_product->post->ID) { 

      $horray_updated_prices_works[] = $cart_item['data']->price; 

     } 
    } 

} 
관련 문제