2015-02-06 148 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 2015-02-06 12:29:28

+0

复合材料制品是一种有偿的插件。我只是想要第二个产品有ID($ p_id)也应该添加到购物车与原来添加到购物车产品。 – luckyamit 2015-02-06 12:31:49

+0

是的,但它确实如你所描述的那样。 – helgatheviking 2015-02-06 14:51:18

回答

6

的woocommerce “add_to_cart” 功能运行钩 “woocommerce_add_to_cart”。所以,在你的代码中运行“add_to_cart”,它运行着“woocommerce_add_to_cart”,它运行你的代码,运行“add_to_cart”,等等......你创建了一个递归循环。

您需要找到一种替代方法,或停止在您自己的代码中调用$woocommerce->cart->add_to_cart($p_id, 1);

+0

是的,它就像递归循环一样。我怎么能避免它?我只是想要第二个产品有ID($ p_id)也应该添加到购物车与原来添加到购物车产品。 – luckyamit 2015-02-06 12:26:41

+0

如果您知道产品ID是捆绑产品,您可以将其排除在激活挂钩上 – 2015-02-06 12:59:00

+0

如何排除产品ID以激活挂钩,您可以详细说明还是可以向我提供任何示例? – luckyamit 2015-02-06 13:01:32

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 PARAM?这将打破循环。

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']); 
    } 
} 
相关问题