我正在尝试根据购物车中产品的数量更改购物车内容。我店里只有5件商品:
它们被配置为不同的产品,因此没有捆绑包,套件或任何东西。不止一种面板产品明显比单独添加多个单面板便宜。
然后我还有一个定制产品,根据客户给出的楼层尺寸计算所需的面板数量,然后将购买的单面板数量增加到购物车。
我想在审核时动态更改购物车的内容。
所以例如,如果楼层配置器计算 54个单面板并将它们添加到购物车,我想将购物车项目更改为:
我已经检查了不同的解决方案,但没有一个提供此类功能:
所以,基于this answer thread,我认为我需要使用hook woocommerce_before_calculate_totals
并实现逻辑,但需要一些帮助,因为我是wordpress dev noob。
请注意,在楼层配置器中使用Ajax调用“添加到购物车”按钮:
jQuery("button.ajax_add_to_cart").attr("data-quantity", parseInt(numLozasrealW * numLozasrealH));
感谢任何帮助。
答案 0 :(得分:0)
下面的代码可以解决这个问题,它将替换您的其他产品的定制产品(数量)。您必须设置自定义产品ID,5个普通产品ID和自定义文本通知。
代码:
add_action( 'woocommerce_add_to_cart', 'action_before_cart', 20, 3 );
function action_before_cart( $cart_item_key, $product_id, $quantity ) {
// HERE set your specific product ID
$specific_product_id = 862;
if( $product_id != $specific_product_id ) return;
// HERE set your other product IDs related to panels
$products_panels = array(
861 => 50, // Product ID => for 50 panels
860 => 30, // Product ID => for 30 panels
859 => 18, // Product ID => for 18 panels
858 => 12, // Product ID => for 12 panels
857 => 1, // Product ID => for 1 panel
);
// Loop through all "panels" products IDs
foreach ( $products_panels as $product_id => $panels ) {
if( $quantity >= $panels ){
$qty = floor($quantity / $panels);
$quantity = $quantity % $panels;
$data = 'Panels: '.$panels.' | Quantity: '.$qty.' | Remain: '.$quantity;
print_pr($data);
WC()->cart->add_to_cart( $product_id, $qty );
}
}
// Removing the specific product
WC()->cart->remove_cart_item( $cart_item_key );
// HERE set your custom notice text
wc_add_notice('Here your custom notice text', 'notice');
}
代码放在活动子主题(或活动主题)的function.php文件中。经过测试和工作。
如下所示,当自定义产品添加到购物车时,它会被其他产品替换,以匹配面板数量并显示自定义通知: