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 添加产品的主要内容,如果未能解决你的问题,请参考以下文章

如何开发一个woocommerce插件

使用 wp-woocommerce 的 FirstData

WooCommerce - 覆盖运费

WooCommerce - 同时使用多种付款方式支付订单

使用重定向的 Woocommerce 自定义支付网关工作流程

检查 WooCommerce 是不是处于活动状态以及使用的版本