【问题标题】:Custom Woocommerce cart add has wrong item count自定义 Woocommerce 购物车添加的商品数量错误
【发布时间】:2016-03-12 08:59:35
【问题描述】:

在提交自定义添加到购物车表单后,我正在尝试使用 wp_loaded 操作将产品添加到 woocommerce 购物车。

add_action( 'wp_loaded', 'custom_process_form' );
function custom_process_form(){       
    global $woocommerce;
    if(isset($_POST["addcoupon"])){           
        foreach($_POST as $key=>$value){
            if($key=="addcoupon"){
                    continue;
            }

            $valarr=explode("_",$key);

            if ($valarr[0]=="couponid"){
                $woocommerce->cart->add_to_cart($valarr[1],1);
                $count++;
            }               
        } 
    }       
}

它工作正常,除了第一次加载时,购物车认为我添加了 2 个产品而不是 1 个。由于某种原因,它运行了两次 WC_Cart->calculate_totals() 并且 $this->cart_contents_count 没有重置为零,所以数量增加了两次。 (当我重新加载页面时,购物车显示正确的商品数量)

使用自定义表单添加产品的正确方法是什么?我找不到任何这样的例子。我是否使用了错误的操作?

【问题讨论】:

    标签: php wordpress woocommerce cart


    【解决方案1】:

    我在自己的安装上进行了试验,可以确认我也遇到了同样的情况。对我来说,calculate_totals() 被添加到购物车过程调用一次,然后被 WooCommerce 订阅插件从会话中获取购物车再次调用。你有安装这个插件吗?

    也就是说,我不认为打电话给calculate_totals() 真的是个问题。真正的问题是$this->cart_contents_count 应该重置。我通过将此代码添加到 functions.php 来解决这个问题。

    function reset_quantities( $cart )
    {
         $cart->cart_contents_count = 0;
    }
    add_action( 'woocommerce_before_calculate_totals', 'reset_quantities' );
    

    编辑:实际上这对我不起作用。原因是 WooCommerce 订阅插件通过“woocommerce_before_calculate_totals”操作调用calculate_totals()。这可以防止触发同一操作的其他功能。这张票上提到了这一点。 https://core.trac.wordpress.org/ticket/17817

    试试这个

    function reset_quantities( $cart_object )
    {
        $cart           = $cart_object->get_cart();          
        $cart_object->cart_contents_count = 0;
    
        foreach ( $cart as $cart_item_key => $values ) {
            $cart_object->cart_contents_count  += $values['quantity'];
        }
    }
    add_action( 'woocommerce_after_calculate_totals', 'reset_quantities', 10, 1 );
    

    EDIT2 我刚刚在 Github 上查看了 WooCommerce 的最新提交,calculate_totals() 发生了很大变化。您可能想尝试下载它,看看它是否能解决您的问题。

    【讨论】:

      猜你喜欢
      • 2019-04-23
      • 2019-12-21
      • 1970-01-01
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 2020-09-01
      相关资源
      最近更新 更多