2017-01-21 5 views
1

woocommerce 스마트 쿠폰을 사용하여 "초대 코드"를 만들려고합니다. 이렇게하려면 특정 제품에 카트/체크 아웃시 쿠폰 코드가 필요합니다. 나는 이것을하는 방법을 보았지만, 나는 그들이 원하는 제품뿐만 아니라 모든 제품에 영향을 미쳤다.특정 제품 범주의 필수 쿠폰 코드에 대한 알림 표시

반환 된 변수를 다른 함수로 전달하려고 시도하지만이를 수행하는 방법을 알 수 없습니다.

  //Check to see if user has product with a specific product category in cart  
    function check_product_in_cart() { 

     global $woocommerce; 

     //assigns a default negative value 
     // categories targeted 87, 18, 19 

     $product_in_cart = false; 

     // start of the loop that fetches the cart items 

     foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) { 
      $_product = $values['data']; 
      $terms = get_the_terms($_product->id, 'product_cat'); 

      // second level loop search, in case some items have several categories 
      foreach ($terms as $term) { 
       $_categoryid = $term->term_id; 
       if (($_categoryid === 87) || ($_categoryid === 18) || ($_categoryid === 19)) { 
        //category is in cart! 
        $product_in_cart = true; 
       } 
      } 
     } 

     return $product_in_cart; 
    } 

// Force Coupon codes for Woocommerce 
add_action('woocommerce_check_cart_items', 'force_coupon_code'); 

    function force_coupon_code($product_in_cart) 
    { 
     global $woocommerce; 
     if(is_cart() || is_checkout()){ 
      $my_coupon = $woocommerce->cart->applied_coupons; 
      echo $woocommerce->cart->get_applied_coupons; 
      if(empty($my_coupon)) 
      { 
       wc_add_notice('<strong>' . $btn['label'] . '</strong> ' . __('A coupon code is mandatory for this product.', 'woocommerce'), 'error'); 
      } 
     } 
    } 

첫 번째 부분은 반환해야합니다 제품 $의 product_in_cart 두 번째 부분은 쿠폰을 강제로 :

여기에 최신 버전입니다. 여기 내가 사용하는 코드의 소스가있다. Mandatory Coupon codeChecking products in cart based on category. 새로운 변수 arg에 변수를 두는 것이이 like so을 달성 할 수 있다는 것을 알았지 만 결코 작동하지는 않습니다.

답변

1

업데이트 (WooCommerce 3+ 호환성)

사용하는 코드는 오래된하고 복잡하다. 이것은 Wordpress has_term() 조건 함수를 사용하여 하나의 구부린 함수에서 간단히 수행 할 수 있습니다.이 함수는 상품 카테고리가 장바구니 항목에 있는지 감지합니다.

그래서 코드가 훨씬 더 컴팩트하고 효율적입니다 :

// Force Coupon codes for Woocommerce 
add_action('woocommerce_check_cart_items', 'force_coupon_code'); 
function force_coupon_code() 
{ 
    if(is_cart() || is_checkout()){ 

     // set Here your categories IDs, slugs or names 
     $categories = array(18,19,87); 
     $has_cat = false; 

     // Iterating through cart items 
     foreach (WC()->cart->get_cart() as $cart_item) 
      // Get the product ID (WC 3+ compatibility) 
      $product_id = version_compare(WC_VERSION, '3.0', '<') ? $cart_item['data']->id : $cart_item['data']->get_id(); 
      if(has_term($categories, 'product_cat', $product_id)){ 
       // Product category found in cart items 
       $has_cat = true; 
       // Exit from loop 
       break; 
      } 

     $my_coupon = WC()->cart->get_applied_coupons(); 

     // The Notice is displayed for that product categories when no mandatory coupon has been entered 
     if(empty($my_coupon) && $has_cat) 
      wc_add_notice(__('A coupon code is mandatory for this product.', 'woocommerce'), 'error'); 
    } 
} 

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

이 코드는 테스트되었으며 작동합니다.

+0

아름다운! 매력을 발휘합니다. 나는 더 나은 코드를 제외하고는'if (empty ($ my_coupon) && $ has_cat) '라는 줄을 모두 묶어서 사용하고있다. 이론적으로, 문장에 더 많은 인수를 추가하고'if (empty ($ my_coupon) && $ has_cat) && $ color_blue && etc ... '와 같이 더 좁은 수식을 사용할 수 있습니까? – jimmyjames