2014-11-20 1 views
2

장바구니에 제품이 있는지 확인하는 방법을 모르겠다. 체크 아웃을 위해 하나의 제품 만 허용하면됩니다.단일 제품으로 체크 아웃 : 어떤 제품이 장바구니에 들어 있는지 확인하고 오류가 있음

동일한 제품이 이미 장바구니에있는 경우 제품을 추가하지 못하도록하기 위해 wc-cart.php 클래스에 사용되는 코드는 다음과 같습니다. 꽤 유사해야하지만 일부 WP가 누락되었습니다. 어떤 종류의 제품을 정의하기위한 변수. this code도 시도했지만 functions.php에서는 작동하지 않습니다 (아니요, 저는 하위 테마를 사용하지 않습니다).

if ($product_data->is_sold_individually()) { 
      $in_cart_quantity = $cart_item_key ? $this->cart_contents[ $cart_item_key ]['quantity'] : 0; 

      // If it's greater than 0, it's already in the cart 
      if ($in_cart_quantity > 0) { 
       wc_add_notice(sprintf(
        '<a href="%s" class="button wc-forward">%s</a> %s', 
        $this->get_cart_url(), 
        __('View Cart', 'woocommerce'), 
        sprintf(__('You cannot add another &quot;%s&quot; to your cart.', 'woocommerce'), $product_data->get_title()) 
       ), 'error'); 
       return false; 
      } 
     } 

감사합니다.

+0

카트를 1 아이템 * total * 또는 특정 아이템의 단 하나 수량으로 제한 하시겠습니까? (후자의 경우 개별적으로 판매 할 품목을 설정하십시오.) – helgatheviking

+0

상품 1 개 모두 – GCW

+0

[가능한 한 [Woocommerce가 필요함] 카트에 1 개 제품 만 허용 가능합니다. 제품이 이미 장바구니에 있고 다른 1 개가 추가 된 경우 이전 제품이 제거되어야합니다.] (http://stackoverflow.com/questions/21363268/need-woocommerce-to-only-allow-1-product-in- the-cart-if-a-product-in-already-in) – helgatheviking

답변

1

플러그인을 업데이트 할 때 코드가 손실 될 수 있으므로 woocommerce 코어 파일을 직접 변경하지 마십시오. functions.php에 다음 코드를

추가하며 카트에 단 하나의 제품을 추가합니다 :

add_filter('woocommerce_add_to_cart_validation', 'woocommerce_add_cart_item_data_custom'); 

function woocommerce_add_cart_item_data_custom($cart_item_data) { 

    global $woocommerce; 
    if($woocommerce->cart->cart_contents_count > 0){ 
     wc_add_notice(
        __('You cannot add another product to your cart.', 'woocommerce')); 

       return false; 
    } 
} 
+0

이것은 매우 간단하고 간단합니다! 작동하지만 너무 강해서 오류 메시지를 추가 할 수 없습니다 (예 : '이봐, 카트에 하나 이상의 제품을 추가 할 수 없습니다!'). 또는 제품이없고 ' 장바구니에 처음으로 하나 추가 – GCW

+0

위의 메시지를 표시하는 데 사용 된 업데이트 된 코드입니다. 위에 업데이트되었습니다. –

0

이 각 제품이 지남에 따라 항목이 장바구니에 추가하기 전에 실행되는 필터/후크 그것이 추가되기 전에 유효성 검사를 통해.

그래서 제품의 유효성을 검사 할 때 장바구니에 이미 항목이 있는지 확인하고 해당 항목을 지우고 (현재 항목을 추가 할 수있는 경우) 오류 메시지를 추가 할 수 있습니다.

/** 
* When an item is added to the cart, remove other products 
*/ 
function so_27030769_maybe_empty_cart($valid, $product_id, $quantity) { 

    if(! empty (WC()->cart->get_cart()) && $valid){ 
     WC()->cart->empty_cart(); 
     wc_add_notice('Whoa hold up. You can only have 1 item in your cart', 'error'); 
    } 

    return $valid; 

} 
add_filter('woocommerce_add_to_cart_validation', 'so_27030769_maybe_empty_cart', 10, 3); 
+0

음, 이것은 나를 위해 작동하지 않습니다. 그 '10, 3 '은 무엇입니까? – GCW

+0

I * think * 조건부 논리를 수정했습니다. 그래도 작동하지 않으면 시간이 있으면 테스트 해 보겠습니다. ['add_filter()'] (http://codex.wordpress.org/Function_Reference/add_filter)를보십시오. 10은 우선 순위이고 3은 함수에 전달할 변수의 수입니다. 이 경우에는 마지막 두 변수를 사용하지 않기 때문에 실제로 필요하지 않습니다. – helgatheviking

관련 문제