2017-01-21 3 views
1

Я ищу для создания «кодов приглашений» с использованием смарт-купонов woocommerce. Для этого я хочу, чтобы определенные продукты REQUIRE составляли код купона в корзине/выписке. Я видел способы сделать это, однако они затрагивают все продукты, а не только те, которые я хочу.Просмотр уведомления по обязательным кодам купона со специальными категориями продуктов

Я пытаюсь передать возвращенную переменную другой функции, однако я не могу понять, как это сделать.

Вот последняя версия:

  //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 code и Checking products in cart based on category. Я читал, что размещение переменной внутри новой функции args может привести к этому 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

Красивая! Работает в обаянии. Я все еще участвую, поэтому, кроме кода MUCH better, строка 'if (empty ($ my_coupon) && $ has_cat)' является тем, что связывает все это вместе. Теоретически, могу ли я добавить больше аргументов в утверждение и далее сузить, например 'if (empty ($ my_coupon) && $ has_cat) && $ color_blue && etc ...'? – jimmyjames

Смежные вопросы