2015-02-06 89 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']); 
    } 
}