在woocommerce中使用foreach设置购物车数量时无限循环

时间:2018-11-28 14:19:40

标签: php wordpress woocommerce cart product-quantity

我正在尝试使用以下代码以编程方式设置Woocommerce购物车中当前的商品数量(我在此处输入数字42作为测试-动态值将在停止行为后进入其中)。

我正在使用的代码如下:

function update_quantity_in_cart( $cart ) {

if( ! is_cart() ) {
return;
}  

// Iterate through each cart item
foreach( $cart->get_cart_contents() as $item_key=>$cart_item ) {
  var_dump($cart);

  if ( isset( $cart_item['quantity'] )){
    $cart->set_quantity( $item_key, 42 ); // I think this line is causing the problem
  }
} // end foreach 
}

add_action( 'woocommerce_before_calculate_totals', 'update_quantity_in_cart', 5, 1 );

一切都很好,直到我添加行“ $ cart-> set_quantity($ item_key,42);”为止。并引发“致命错误:未捕获错误:达到最大函数嵌套级别'256',正在中止!”错误。由于某种原因,添加此行似乎会使它无限循环。

$ cart的var_dump()返回一个对象,其中包括public'cart_contents'(我要尝试获取的位),public'removed_cart_contents',public'applied_coupons'等。我的直觉是,它试图为所有这些而不是cart_contents更新数量。如果是这样,是否有办法隔离购物车中的内容并仅返回这些内容。 https://docs.woocommerce.com/wc-apidocs/class-WC_Cart.html建议get_cart_contents()应该这样做,但显然不应该。

任何明显的我在这里做错了吗?

1 个答案:

答案 0 :(得分:1)

您的代码中存在一些错误和缺少的部分。试试这个:

add_action( 'woocommerce_before_calculate_totals', 'update_quantity_in_cart' );
function update_quantity_in_cart( $cart ) {
    if ( is_admin() && !defined('DOING_AJAX') )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    foreach( $cart->get_cart() as $cart_item_key => $cart_item ) {
        $cart->set_quantity( $cart_item_key, 42 );
    }
}

代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试和工作。