2016-10-03 70 views
5

Szukam odpowiedniego haka w WooCommerce, ponieważ muszę dodać produkt promocyjny do koszyka po osiągnięciu określonej kwoty koszyka, takiej jak 100 jednostek konwencjonalnych.Dodanie produktu promocyjnego po osiągnięciu określonej kwoty koszyka

Używam również haka 'init', ale nie sądzę, że to prawda.

Oto mój kod:

function add_free_product_to_cart(){ 
    global $woocommerce; 
    $product_id = 2006; 
    $found = false; 
    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(!$found) 
     { 
      $maximum = 100; 
      $current = WC()->cart->subtotal; 
      if($current > $maximum){ 
       $woocommerce->cart->add_to_cart($product_id); 
      }   
     }  
    } 
} 
add_action('woocommerce_add_to_cart', 'add_free_product_to_cart'); 

które hak należy używać do tego celu?

Czy możesz podać mi link do podobnego problemu?

Dzięki

+0

Niestety ten błąd musi być add_action ('init', 'add_free_product_to_cart'); –

Odpowiedz

8

Jak jesteś pewien kierowania wózkiem ilości, aby dodać produkt promocyjny w koszyku, można użyć woocommerce_before_calculate_totals hak do osiągnięcia tego celu zbudowanym z niestandardowych funkcji.

Trzeba także usunąć ten element promocyjny jeśli aktualizacja klienta wózek (który jest osadzenie w tej niestandardowej funkcji zbyt).

Oto kod:

add_action('woocommerce_before_calculate_totals', 'adding_promotional_product', 10, 1); 
function adding_promotional_product($cart_object) { 

    if (is_admin() && ! defined('DOING_AJAX')) 
     return; 

    $promo_id = 99; // <=== <=== <=== Set HERE the ID of your promotional product 
    $targeted_cart_subtotal = 100; // <=== Set HERE the target cart subtotal 
    $has_promo = false; 
    $subtotal = 0; 

    if (!$cart_object->is_empty()){ 

     // Iterating through each item in cart 
     foreach ($cart_object->get_cart() as $item_key => $item_values){ 

      // If Promo product is in cart 
      if($item_values['data']->id == $promo_id) { 
       $has_promo = true; 
       $promo_key= $item_key; 
      } else { 
       // Adding subtotal item to global subtotal 
       $subtotal += $item_values['line_subtotal']; 
      } 
     } 
     // If Promo product is NOT in cart and target subtotal reached, we add it. 
     if(!$has_promo && $subtotal >= $targeted_cart_subtotal) { 
      $cart_object->add_to_cart($promo_id); 
      echo 'add'; 
     // If Promo product is in cart and target subtotal is not reached, we remove it. 
     } elseif($has_promo && $subtotal < $targeted_cart_subtotal) { 
      $cart_object->remove_cart_item($promo_key); 
     } 
    } 
} 

Kod ten idzie w aktach function.php swojej aktywne dziecko motywu lub tematu() lub w dowolnym pliku wtyczki.

Ten kod przetestowany i działa.

Powiązane wątek: WooCommerce - Auto add or auto remove a freebie product from cart

Kod aktualizowana (2017-04-19)

+0

Mam jednak tylko jedną kwestię. Jeśli chodzi o testowanie, kiedy używam strzałek na konkretnej pozycji w wózku, aby zaktualizować liczbę przedmiotów w koszyku (w celu osiągnięcia określonej kwoty koszyka), do kwoty koszyka dodawana jest dodatkowa opłata TYLKO DO ODNOWIENIA strony LUB kontynułuj żeby sprawdzić...?? To dziwny problem. Czy mimo to mogę odświeżyć stronę, gdy element wolny/promocyjny zostanie dodany lub usunięty, aby klient zawsze sprawdzał poprawną kwotę? – JStormThaKid