我已经尝试过多次覆盖购物车中的现有产品数量,但没有。
其实我有这段代码:
add_action('woocommerce_add_to_cart', 'add_to_cart_qty', 10, 6 );
function add_to_cart_qty( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ){
$real_product_id = $variation_id > 0 ? $variation_id : $product_id;
$product = wc_get_product($real_product_id);
$product_stock = $product->get_stock_quantity();
// Zero or negative stock (remove the product)
if( $product_stock <= 0 && $product->get_manage_stock() ){
WC()->cart->remove_cart_item( $cart_item_key );
return;
}
if( $quantity > $product_stock && $product->get_manage_stock() ){
WC()->cart->set_quantity( $cart_item_key, $product_stock );
}
}
设置将产品添加到购物车时的最大可用产品数量。 但是,当客户更改物品数量时,我还需要在购物车页面中进行操作......
我认为我们可以通过两种方式解决这个问题:
我为此尝试了很多不同的代码段,但没有结果。
任何帮助将不胜感激。
答案 0 :(得分:1)
使用此 woocommerce_after_cart_item_quantity_update
操作挂钩中的自定义功能,可以避免客户在更新购物车数量时添加超过产品库存数量:
add_action('woocommerce_after_cart_item_quantity_update', 'update_cart_items_quantities', 10, 3 );
function update_cart_items_quantities( $cart_item_key, $quantity, $old_quantity ){
$cart = WC()->cart;
$cart_data = $cart->get_cart();
$cart_item = $cart_data[$cart_item_key];
$manage_stock = $cart_item['data']->get_manage_stock();
$product_stock = $cart_item['data']->get_stock_quantity();
// Zero or negative stock (remove the product)
if( $product_stock <= 0 && $manage_stock ){
unset( $cart->cart_contents[ $cart_item_key ] );
}
if( $quantity > $product_stock && $manage_stock ){
$cart->cart_contents[ $cart_item_key ]['quantity'] = $product_stock;
}
return $product_quantity;
}
代码放在活动子主题(或活动主题)的function.php文件中或任何插件文件中。
此代码经过测试,即使对于产品变体也适用。