2017-09-14 16 views
0

내 웹 사이트에서 저는 WooCommerce v3.1 + 및 Woocommerce Subscriptions를 사용합니다. 비디오 카메라 및 구독 계획과 같은 항목이 포함 된 내 제품. 내가 뭘하고 싶은 것입니다 : 다른 경우Woocommerce의 항목 수를 기반으로 한 정기 구독 제품과 일반 제품을 짝을 짓습니다.

  • (체크 아웃 전) 카트 페이지에서 가입 계획의 양이 카메라의 수량이 동일해야합니다에서, 카메라 및 구독 계획을 구입,
  • 카메라가 장바구니에 추가되면 오류 메시지가 나타나야합니다.

예를 들어 장바구니에 수량 (2) 및 구독 계획 (수량 1)과 같은 특정 제품 2 개가있는 경우 가입 계획 수량이 아닌 경우 체크 아웃 할 수 없습니다 카메라 수량과 일치합니다.

나는 어린이 테마에서 functions.php을 수정해야한다고 생각합니다. 어떤 도움을

See example image을 감상 할 수있다


편집 : 내가 functions.php 코드의 조각을 추가했지만이 장바구니에 X2 전체 항목을 추가합니다 :

add_action('woocommerce_check_cart_items', 'wh_wc_minimum_order_amount'); 
function wh_wc_minimum_order_amount() { 
    $minimum = 2; 
    if (WC()->cart->get_cart_contents_count() % $minimum != 0) { 
     // wc_clear_notices(); 
     wc_add_notice(sprintf('<strong>Error: check product quantity</strong>', $minimum), 'error'); 
    } 
} 

그래서 이것은 효과가 없습니다.

+0

작동합니다 : https://docs.woocommerce.com/document/minmax-quantities/ (여기 아무도 코드를 작성하려고하지 않습니다 최선의 방법은 무언가를 시도하고 특정 문제에 대해 물어 보는 것입니다.) – jdv

+0

도움이 될만한 힌트/링크/플러그인을 원합니다. 감사합니다 –

+0

functions.php에 코드 조각을 추가 할 수 있지만 카트에 x2 개의 총 항목이 추가됩니다 add_action ('woocommerce_check_cart_items', 'wh_wc_minimum_order_amount'); 함수 wh_wc_minimum_order_amount() { $ minimum = 2; if (WC() -> cart-> get_cart_contents_count() % $ minimum! = 0) { // wc_clear_notices(); wc_add_notice (sprintf ('오류 : 확인 수량 :', $ 최소), '오류'); } } –

답변

0

여기 정상적인 제품 수가 구독 계획과 일치하지 않을 때 맞춤 알림을 표시하고 고객에게 가볍게 경고하는 완벽한 솔루션입니다. 제품이 요구 사항과 일치하지 않으면 고객이 결제에서 (체크 아웃하지 않기) 페이지로 리디렉션됩니다.

코드 (주석)을 :

// Replacing add to cart button link on shop and archives 
add_filter('woocommerce_loop_add_to_cart_link', 'replacing_add_to_cart_button', 10, 2); 
function replacing_add_to_cart_button($button, $product) { 
    if($product->is_type('variable-subscription') || $product->is_type('variable')) return $button; 

    $button_text = __('View product', 'woocommerce'); 
    $button = '<a class="button" href="' . $product->get_permalink() . '">' . $button_text . '</a>'; 
    return $button; 
} 

// Counting cart items (utility function) 
function counting_cart_items($subscriptions_count = 0, $products_count = 0, $wc_cart = '') { 
    $cart_obj = $wc_cart != '' ? $wc_cart : WC()->cart; 
    foreach($cart_obj->get_cart() as $cart_item){ 
     if ($cart_item['data']->is_type('subscription')) 
      $subscriptions_count += intval($cart_item['quantity']); 
     else 
      $products_count += intval($cart_item['quantity']); 
    } 
    return array('subscrip' => $subscriptions_count, 'product' => $products_count); 
} 

// Displaying Notification messages (utility function) 
function conditionally_display_notice($subscriptions_count, $products_count) { 
    $count = $subscriptions_count - $products_count; 
    if($subscriptions_count < $products_count) 
     $txt = sprintf(_n('%s subscription plan', '%s subscriptions plans', -$count, 'woocommerce'), -$count); 
    elseif($subscriptions_count > $products_count) 
     $txt = sprintf(_n('%s product', '%s products', $count, 'woocommerce'), $count); 
    if($subscriptions_count != $products_count) 
     wc_add_notice(sprintf(__("You need to add %s, to be able to checkout", "woocommerce"), $txt), "notice"); 
} 

// Checking and notifying when products are added to cart 
add_filter('woocommerce_add_to_cart_validation', 'conditionally_check_add_to_cart', 10, 3); 
function conditionally_check_add_to_cart($passed, $product_id, $quantity) { 
    $items_count = counting_cart_items(); // Counting cart items 
    $product = wc_get_product($product_id); // Get an instance of the WC_Product object 

    // Get the total live count 
    if($product->is_type('subscription')) 
     $items_count['subscrip'] += intval($quantity); 
    else 
     $items_count['product'] += intval($quantity); 

    // Notification messages 
    conditionally_display_notice($items_count['subscrip'], $items_count['product']); 
    return $passed; 
} 

// Conditionally checking and adding your subscription when a product is added to cart 
add_action('woocommerce_before_main_content', 'display_notice_on_shop_archives'); 
function display_notice_on_shop_archives() { 
    if(is_product()) return; 
    $items_count = counting_cart_items(); // Counting cart items 

    // Notification messages 
    conditionally_display_notice($items_count['subscrip'], $items_count['product']); 
    wc_print_notices(); 
} 
/* 
// Conditionally checking and adding your subscription when a product is added to cart 
add_action('woocommerce_add_to_cart', 'conditionally_check_add_to_cart', 10, 6); 
function conditionally_check_add_to_cart($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data) { 
    $items_count = counting_cart_items(); // Counting cart items 
    $product = wc_get_product($product_id); // Get an instance of the WC_Product object 

    // Get the updated count 
    if($product->is_type('subscription')) 
     $items_count['subscrip'] += intval($quantity); 
    else 
     $items_count['product'] += intval($quantity); 

    // Notification messages 
    conditionally_display_notice($items_count['subscrip'], $items_count['product']); 
} 
*/ 
// Checking and validating when updating cart item quantities 
add_filter('woocommerce_update_cart_validation', 'conditionally_check_cart_update', 10, 4); 
function conditionally_check_cart_update($passed, $cart_item_key, $values, $updated_quantity) { 
    $items_count = counting_cart_items(); // Counting cart items 

    // Get the updated count 
    if($values['data']->is_type('subscription')) 
     $items_count['subscrip'] += intval(-$values['quantity'] + $updated_quantity); 
    else 
     $items_count['product'] += intval(-$values['quantity'] + $updated_quantity); 

    // Notification messages 
    conditionally_display_notice($items_count['subscrip'], $items_count['product']); 
    return $passed; 
} 

// Checking and validating when updating cart item quantities 
add_filter('woocommerce_cart_item_removed', 'conditionally_check_removed_cart_item', 10, 2); 
function conditionally_check_removed_cart_item($cart_item_key, $wc_cart) { 
    $items_count = counting_cart_items(0, 0, $wc_cart); // Counting cart items 

    // Notification messages 
    conditionally_display_notice($items_count['subscrip'], $items_count['product']); 
} 

// Checking and conditionally redirecting to shop page 
add_action('template_redirect', 'conditional_checkout_redirection'); 
function conditional_checkout_redirection(){ 
    if (is_checkout()) { 
     $items_count = counting_cart_items(); // Counting cart items 

     if ($items_count['subscrip'] != $items_count['product']) { 
      // redirecting to shop page 
      wp_redirect(get_permalink(woocommerce_get_page_id('shop'))); 
      exit(); // always exit 
     } 
    } 
} 

코드가 어떤 플러그인 파일도 function.php의 활성 자식 테마 (또는 테마)의 파일이나 간다.

이 코드는 Woocommerce 3+에 시험이 도움이 될 아마도

+0

고맙습니다! 코드가 완벽하게 작동합니다. –