我正在尝试使用以下代码以编程方式设置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()应该这样做,但显然不应该。
任何明显的我在这里做错了吗?
答案 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文件中。经过测试和工作。