WooCommerce 使用 add_to_cart 添加产品
Posted
技术标签:
【中文标题】WooCommerce 使用 add_to_cart 添加产品【英文标题】:WooCommerce add product with add_to_cart 【发布时间】:2022-01-05 11:24:46 【问题描述】:通常这听起来是一个非常简单的任务。当特定产品添加到购物车时,我想将(礼品)产品添加到购物车。一旦“正常产品”被删除,免费产品也应该被删除。
我目前的方法是使用自定义元数据将免费产品添加到购物车。如果单击删除按钮,它将检查元数据并仅删除这些元数据。
我的问题是免费产品只添加到购物车一次。如果我删除此“检查”,则该功能将不再起作用。我做错了什么?
/* Add Free Gift for Products */
function gift_add_product_to_cart()
$product_id = array(20070, 39039); // Product Id of the free product which will get added to cart
$allowedprdIds = array(38162, 38157); // Product Ids of the products where the free product will be added
$is_present = false;
$is_allowedPrd = false;
$cart = WC()->cart->get_cart();
//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 (in_array($_product->get_id(), $product_id))
$is_present = true;
if (in_array($_product->get_id(), $allowedprdIds) )
$is_allowedPrd = true;
// if free product not found, add it
if (!$is_present && $is_allowedPrd)
foreach($product_id as $freeProduct => $id)
/*WC()->cart->add_to_cart(20070);*/
WC()->cart->add_to_cart($id,1, NULL, NULL, array('freeDosMas' => 'yes'));
add_action( 'woocommerce_add_to_cart', 'gift_add_product_to_cart', 10, 2 );
/* Remove Free Product if Produkt removed */
function remove_gift_from_cart()
global $woocommerce;
$prod_to_remove = array(20070, 39039); // Product ID of Free Product
$allowedprdIds = array(38162, 38157);
$is_freeGift = false;
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item )
if (in_array($cart_item['product_id'], $prod_to_remove) && $cart_item['freeDosMas'] == 'yes')
$is_freeGift = true;
if (in_array($cart_item['product_id'], $allowedprdIds) )
$is_allowedPrd = true;
if($is_freeGift && !$is_allowedPrd)
foreach($prod_to_remove as $removeProduct => $id)
if (in_array($cart_item['product_id'], $prod_to_remove))
WC()->cart->remove_cart_item( $cart_item_key );
add_action( 'woocommerce_cart_item_removed', 'remove_gift_from_cart', 10, 2 );
【问题讨论】:
【参考方案1】:好的,知道了!
通过在操作 woocommerce_add_to_cart 函数中使用 WC()->cart->add_to_cart 插入新产品,它会创建一个无限递归循环,从而引发错误。
我们可以通过在插入新产品之前删除 add_to_cart 操作来解决此问题:
remove_action('woocommerce_add_to_cart', __FUNCTION__);
(Showing technical difficulties if using add_to_cart() function)
【讨论】:
以上是关于WooCommerce 使用 add_to_cart 添加产品的主要内容,如果未能解决你的问题,请参考以下文章