2015-02-06 4 views
4

enter image description hereКак добавить фильтр или крюк для «woocommerce_add_to_cart»

Я хочу добавить в корзину два продукта одновременно, один оригинальна (текущий) продукт и второй от выпадающего списка

add_action('woocommerce_add_to_cart', 'custome_add_to_cart'); 
$cnt=2 
function custome_add_to_cart() { 
    global $woocommerce; 
     $cnt = $cnt + 1; 
     echo $cnt."X"; 
     echo $p_id=$_POST['assessories']; 
    $woocommerce->cart->add_to_cart($p_id, 1); 

} 

Выход: - Как вы можете видеть на выходном изображении ниже, он добавляет тот же раскрывающийся элемент, что и много раз в корзине, но я хочу только 1 количество, чтобы добавить в корзину. кажется, что функция add_to_cart выполняется много раз. Что мне делать или как добавить фильтр с передачей второго выпадающего продукта в качестве параметра для добавления в функцию корзины? поэтому я могу добавить этот продукт также в корзину.

enter image description here

+0

Я хотел бы предложить вам попробовать [Композитные продукты] (http://woothemes.com/products/composite-products) – helgatheviking

+0

композитных изделий является платной плагин. Я просто хочу, чтобы второй продукт, имеющий id ($ p_id), также должен добавить в корзину с оригинальным продуктом для добавления в корзину. – luckyamit

+0

Да, но это точно то, что вы описываете. – helgatheviking

ответ

6

В "add_to_cart" функции WooCommerce запустить крюк "woocommerce_add_to_cart". Итак, в вашем коде запускается «add_to_cart», на котором запущен «woocommerce_add_to_cart», который запускает ваш код, который запускает «add_to_cart», etcetera etcetera ... Вы создали рекурсивный цикл.

Вам нужно найти альтернативный способ или прекратить звонить по номеру $woocommerce->cart->add_to_cart($p_id, 1); в ваш собственный код.

+0

Да, это как рекурсивный цикл. как я могу избежать этого? Я просто хочу, чтобы второй продукт, имеющий id ($ p_id), также должен добавить в корзину с оригинальным продуктом для добавления в корзину. – luckyamit

+0

Если вы знаете идентификаторы продуктов, которые являются связями, вы можете исключить их из активации крючка –

+0

, как я могу исключить идентификатор продукта из активации крючка, можете ли вы разработать или предоставить мне какой-либо пример? – luckyamit

6

Это должно работать:

add_action('woocommerce_add_to_cart', 'custome_add_to_cart'); 
function custome_add_to_cart() { 
    global $woocommerce; 

    $product_id = $_POST['assessories']; 

    $found = false; 

    //check if product already in cart 
    if (sizeof(WC()->cart->get_cart()) > 0) { 
     foreach (WC()->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) 
      WC()->cart->add_to_cart($product_id); 
    } else { 
     // if no products in cart, add it 
     WC()->cart->add_to_cart($product_id); 
    } 
} 

на основе следующих источников: https://docs.woothemes.com/document/automatically-add-product-to-cart-on-visit/

-1

Это может быть старым, но вы пробовали снятие с охраной assessories параметров после добавления в корзину ?, это будет разорвать петлю.

function custome_add_to_cart() { 
    global $woocommerce; 
    if(isset($_POST['assessories'])){ 
     $cnt = $cnt + 1; 
     echo $cnt . "X"; 
     echo $p_id = $_POST['assessories']; 
     $woocommerce->cart->add_to_cart($p_id, 1); 
     unset($_POST['assessories']); 
    } 
} 
Смежные вопросы