问题描述
我已经使用自定义代码为每个产品的“商店”页面和“类别”页面添加了“数量”字段和“添加到购物车”按钮,并且还基于以下参数为数量字段设置了最小数量,最大数量和步长产品ID。这些产品都是葡萄酒,对于其中的某些产品,您可以购买至少6种产品,而步骤6则为6。 6、12、18、24等,对于某些人,您可以购买至少12个,步长为12,例如12、24、36、48等。
这一切都很好,但是数量和价格都没有传递到购物车页面。无论订购多少,数量总是将自己设置为最小值,并且当从“商店”或“类别”页面订购产品时,价格仅在购物车页面上显示一个单位。
function wpse_quantity_input_default( $args,$product ) {
$productID = $product->id;
foreach( WC()->cart->get_cart() as $key => $item ){
// MINIMUM / MAXIMUM
if($productID == '566' || $productID == '562' || $productID == '1177' || $productID == '1181' || $productID == '1183' || $productID == '1185' || $productID == '1242' || $productID == '1250' || $productID == '1251' || $productID == '1252' || $productID == '1254') {
$args['input_value'] = 12;
$args['max_value'] = 240; // Maximum value (variations)
$args['min_value'] = 12; // Minimum value (variations)
$args['step'] = 12; // Quantity steps
} else {
$args['input_value'] = 6;
$args['max_value'] = 120; // Maximum value (variations)
$args['min_value'] = 6; // Minimum value (variations)
$args['step'] = 6; // Quantity steps
}
}
return $args;
}
add_filter( 'woocommerce_quantity_input_args','wpse_quantity_input_default',1000,2 );
解决方法
所描述的问题来自Ajax添加到购物车按钮(及其数量字段),因此您应该在问题中提供所有相关代码。
现在,在提供的代码中,无需使用foreach循环即可使事情复杂化。使用in_array()函数可以以更有效的方式简化代码,如下所示:
add_filter( 'woocommerce_quantity_input_args','custom_quantity_input_args',1000,2 );
function custom_quantity_input_args( $args,$product ) {
$products_ids = array(562,566,1177,1181,1183,1185,1242,1250,1251,1252,1254);
if( in_array( $product->get_id(),$products_ids ) ) {
$args['input_value'] = 12;
$args['max_value'] = 240; // Maximum value (variations)
$args['min_value'] = 12; // Minimum value (variations)
$args['step'] = 12; // Quantity steps
} else {
$args['input_value'] = 6;
$args['max_value'] = 120; // Maximum value (variations)
$args['min_value'] = 6; // Minimum value (variations)
$args['step'] = 6; // Quantity steps
}
return $args;
}
代码进入活动子主题(或活动主题)的functions.php文件中。经过测试,可以正常工作。