【发布时间】:2021-05-31 11:04:56
【问题描述】:
我正在尝试设置自定义优惠券代码,以便客户可以将附加产品添加到他们的购物车中,前提是他们的购物车总额为 50 美元或更多。
我正在使用Allow add to cart for specific products based on cart total in WooCommerce 答案代码,它允许或拒绝根据购物车总数添加产品,这很好用。
我的问题是,如果插件项目在购物车中并且购物车总数不再在阈值范围内,我还有一段代码应该删除它。
在我的情况下,我将阈值设置为 50 美元,附加产品的价格为 10 美元。
在测试中,我发现当购物车总额为 60 美元或更多时,一切正常。我什至可以从购物车中删除几件商品,插件商品将一直保留到总数低于阈值,然后它也会被删除。
但是,如果我去添加插件项目时购物车的总金额在 50 美元到 60 美元之间,那么插件项目一添加就会立即删除。
我希望操作顺序会发生
- 检查购物车总额,发现超过 50 美元
- 允许我添加插件项目
- 检查包含插件项目的购物车总额,发现现在超过 60 美元
- 允许插件保留
基于Add or remove specific cart Item based on WooCommerce cart total 答案代码,这是我正在使用的代码:
add_action( 'woocommerce_before_calculate_totals', 'add_or_remove_cart_items', 10, 1 );
function add_or_remove_cart_items( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// ONLY for logged users (and avoiding the hook repetition)
if ( ! is_user_logged_in() && did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
$threshold_amount = 50; // The threshold amount for cart total
$addon_product_id = 7039; // ID of the addon item
$addon_product_cost = 10; // Cost of addon item
$cart_items_total = 0; // Initializing
$threshold_amount_with_addon = $threshold_amount + $addon_product_cost;
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item_key => $cart_item ){
// Check if the free product is in cart
if ( $cart_item['data']->get_id() == $addon_product_id ) {
$addon_item_key = $cart_item_key;
}
// Get cart subtotal incl. tax from items (with discounts if any)
$cart_items_total += $cart_item['line_total'] + $cart_item['line_tax'];
}
// If cart total is below the defined amount and addon product is in cart, we remove it.
if ( $cart_items_total < $threshold_amount_with_addon && isset($addon_item_key) ) {
$cart->remove_cart_item( $addon_item_key );
return;
}
}
我终其一生都无法弄清楚出了什么问题。任何帮助将不胜感激。
【问题讨论】:
标签: php wordpress woocommerce cart add-on