2015-01-15 2 views
0

Я использую динамическое ценообразование для скидки на предмет, чтобы освободить друг друга, я хочу, чтобы клиент не добавлял бесплатный продукт в качестве отдельного шага и просто позволял системе добавьте его.Добавить товар в корзину автоматически, когда есть другой товар

Я начал с snippet, но я не могу получить эту работу, когда элемент присутствует

это то, что я получил до сих пор:

<?php 

function add_product_to_cart() { 
    if (! is_admin()) { 
     global $woocommerce; 
     $product_id_gift = 2287; 
     $found = false; 
     $product_id = 30; 
     $incart_free = false; 

     foreach($woocommerce->cart->get_cart() as $cart_item_key => $values) { 
      $_product = $values['data']; 
       if ($_product->id == $product_id){ 
       $incart_free = true; 
      } 
     return $incart_free; 
} 
     if($incart_free == true) { 
      //check if product already in cart 
      if (sizeof($woocommerce->cart->get_cart()) > 0) { 
       foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) { 
        $_product = $values['data']; 
        if ($_product->id == $product_id_gift) 
         $found = true; 
       } 
       // if product not found, add it 
       if ($found != true ) 
        $woocommerce->cart->add_to_cart($product_id_gift); 
      } else { 
       // if no products in cart, add it 
       $woocommerce->cart->add_to_cart($product_id_gift); 
      } 
     } 
    } 
} 

add_action('init', 'add_product_to_cart'); 

?> 

Спасибо!

ответ

0

Ваша логика совершенно неверна, потому что if ($_product->id == $product_id_gift) никогда не будет правдой, так как оба product_id отличается.

Так логика должна быть:

1. Проверьте все продукты, которые добавляются в к корзине
2. Убедитесь, что если какой-либо продукт в корзину, имеющих свободные продукты или не
3. Если да, то просто добавьте бесплатный продукт.

Так code будет что-то вроде этого:

add_action('init', 'add_product_to_cart'); 

    function add_product_to_cart() { 
    if (! is_admin()) { 
    global $woocommerce; 
    $product_id = 30; //Your product ID here 
    $free_product_id = 2287; //Free product ID here 
    $found = false; 
    //check if product already in cart 
    if (sizeof($woocommerce->cart->get_cart()) > 0) { 
    foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) { 
    $_product = $values['data']; 
    if ($_product->id == $product_id){ 
    $found = true; 
    } 
    } 
    // if product not found, add it 
    if ($found) 
    $woocommerce->cart->add_to_cart($free_product_id); 
    } 
    } 
    } 

Примечание: Untested.So дайте мне знать выход, а также.

1

Если я правильно понял ваш вопрос, вы ищете, чтобы сделать товар свободным, если определенные товары находятся в корзине покупок. Вот мое решение:

1. Создать купон на WooCommerce в Wordpress. Сумма купона 100% и тип скидки 'Товар% Discount'. Перейдите в раздел «Ограничение использования-> Продукты и укажите конкретный продукт, который вы хотите быть свободным, это сделает купон применимым только к данному продукту.

2. Создайте функцию, которая сначала проверяет, есть ли в корзине определенные предметы, и если да, то добавляет и скидывает товар, который вы хотите получить в корзину. Следующий код будет делать трюк (я проверил его и он работал отлично, хотя это не самый чистый раствор):

add_action('init', 'product_discount'); 

function product_discount(){ 

//variable declerations. 
global $woocommerce; 
$product_id = 1; // product to add 
$products= array('2', '3', '4'); //specific product(s) to be present in the cart 
$coupon_code = 'abc'; // coupon code from wp 

//get the cart contents. 
$cart_items = $woocommerce->cart->get_cart(); 
//check if the cart is not empty. 
if(sizeof($cart_items) > 0){  
    //loop through the cart items looking for the specific products. 
    foreach ($cart_items as $key => $item){  
     //check if the cart items match to any of those in the array and check if the desired product is in the cart. 
     if(in_array($item['product_id'], $products) && $item['product_id'] != $product_id){ 
       //add course. 
       $woocommerce->cart->add_to_cart($product_id); 
       //discount course. 
       $woocommerce->cart->add_discount(sanitize_text_field($coupon_code)); 
      }else{ 
       break; //to prevent the product from being added again for the next loop. 
      } 
    }   
} 
} 

Надеется, что это помогает!

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