2015-02-06 3 views
1

구성 : 이벤트가 PRO 3.9 이벤트 일정 달력 4.1 WooCommerce 제품 번들 - 장바구니 수량

워드 프레스 : 이벤트 웹 사이트에 대한 WooCommerce 티켓 3.9 WooCommerce 2.2.11 WooCommerce 제품 번들 4.6.2 를 판매 다음 티켓 :

성인 $ (25) 아동 $ (5) 유아는 $ 0 가족 $ (55) 패밀리 티켓이 WooCommerce 롤빵로 구성됩니다 (1-2 X 성인, 1-3 아동까지로 구성) 번들 된 제품은 어른과 어린이입니다 dled 제품. 성인은 2, 어린이는 3으로 설정됩니다.

패밀리 번들 제품이 장바구니에 추가되면 장바구니에있는 것으로보고 된 항목의 수는 6 개입니다. 1 x Family 부모 제품과 2 x 성인 및 3 x 어린이 어린이 제품.

여기에 원하는 결과는 장바구니가 성인 2 명과 성인 3 명을 신고해야합니다. 즉, 제품 수에서 상위 제품을 무시하십시오.

내 질문 : 카트의 항목 수를 계산할 때 WooCommerce가 제품 번들의 상위 제품을 무시하도록하려면 무엇이 필요합니까?

답변

2

제품 별 가격 책정 모드의 번들은 번들 항목 수를 자동으로 계산합니다. "번들"모드에서 아이템의 수는 부모와 같다고 가정합니다.

이 카운트 팅겨 그래서 나는 그것을 통해 비활성화 할 수 있다고 생각 ... 번들 '카트 클래스에 달성 :

function so_28359520_remove_bundles_counting(){ 
    global $woocommerce_bundles; 
    remove_filter('woocommerce_cart_contents_count', array($woocommerce_bundles->display, 'woo_bundles_cart_contents_count')); 
} 
add_action('init', 'so_28359520_remove_bundles_counting'); 

편집 :이 있다는 것 때문에 나는 위의 코드 수정 한 번들 전역 변수를 사용하여 플러그인의 기본 클래스에 액세스합니다. 덧붙여은 테마가로드되기 전에 woocommerce_loaded이 실행되는 것으로 생각되므로 그다지 효과가 없을 것 같습니다. init 후크로 변경했습니다.

편집 2 : 번들 해당 항목이 당 제품 운송 계산을 사용하도록 설정되어 경우 상위 항목 에 계산 건너 뜁니다. 즉 적용 할 수없는 경우하지만 당신은 번들 필터링을 해제하고 적용 할 필요가 자신 : 내 functions.php에서 다음과 같은 솔루션을 마련 할 수 있었다 @helgatheviking 도움의 힙

function so_28359520_cart_contents_count($count) { 

    $cart = WC()->cart->get_cart(); 

    $subtract = 0; 

    foreach ($cart as $key => $value) { 

     if (isset($value[ 'stamp' ]) && ! isset($value[ 'bundled_by' ])) { 
      $subtract += $value[ 'quantity' ]; 
     } 
    } 

    return $count - $subtract; 

} 
add_filter('woocommerce_cart_contents_count', 'so_28359520_cart_contents_count'); 
+0

내 하위 테마의 functions.php 파일에 코드를 추가했지만 아무런 차이가 없습니다. 이 기능 상태와 관련된 설명 : "가격 전략에 따라보고 된 카트 항목 수를 필터링합니다. 품목 당 가격 : 컨테이너가 차감되고 고정 가격 : 항목이 차감됩니다." 고정 가격을 사용하므로 카트 수는 하위 항목이 감산 될 때 1이어야합니다. 필터가 실제로 적용되었는지 궁금해서 카트 수를 반환하는 함수를 +10으로 변경했습니다. 장바구니에 아무런 변화가 없기 때문에 번들 카트 개수 필터가 실행되고 있지 않습니다. 여기에서 오는 아이디어는 어디입니까? –

+0

물론 필터가 실행 중인지 테스트하기 전에 스크립트를 functions.php에서 제거했습니다. –

+0

필자는'functions.php'에서 결코 돌아 가지 않을 것이고 (지금 Bundles 클래스에 올바르게 접근하고 있습니다.) 정적 가격의 묶음 중 하나가 장바구니에 3 개의 아이템을 보여주고 있기 때문에 코드를 수정했습니다. – helgatheviking

0

:

function cit_update_cart_count() { 
    global $woocommerce; 
    $count = 0; 
    $cart = $woocommerce->cart->get_cart(); 
    foreach ($cart as $key => $value) { 
     if (!isset($value['bundled_items'])) { 
      $count += $value['quantity']; 
     } 
    } 
    $woocommerce->cart->cart_contents_count = $count; 
} 
add_action('init','cit_update_cart_count',10); 
+0

이것은 정확히 내가 필요로하는 해결책처럼 보입니다. 비슷한 문제. 그러나, 내 기능을 추가 할 때.PHP 백엔드를 열 수 없습니다 - 서버 오류가 반환됩니다. 그 이후로 어떤 것이 바뀌 었습니까? – user2806026

-1

현재

function so_28359520_cart_contents_count($count) { 

    $cart = WC()->cart->get_cart(); 

    $subtract = 0; 

    foreach ($cart as $key => $value) { 

     if (isset($value[ 'stamp' ]) && ! isset($value[ 'bundled_by' ])) { 
      $subtract += $value[ 'quantity' ]; 
     } 
    } 

    return $count - $subtract; 

} 

기록 초기 게시물에 동일한 기능을 사용할 수 있습니다하지만 당신은 클래스 WC-PB-카트 내부를 사용해야합니다.PHP

내부 구조 매력처럼 작동하지만, 내 주제에 내가 WC()에 문제가 있었다
add_filter('woocommerce_cart_contents_count', 'so_28359520_cart_contents_count');

를 추가 -> cart-> cart_contents_count header.php에서, 어떻게 든 필터는 적용되지 않습니다 그것에, 사용하지만

<?php 
    global $woocommerce; 
    // get cart quantity 
    $qty = $woocommerce->cart->get_cart_contents_count(); 
?> 

안에 필터가 적용되고 나는 정확한 수를 얻는다.

+0

'class-wc-pb-cart.php'를 직접 수정하는 것은 좋지 않습니다. – helgatheviking

관련 문제