如何解决WooCommerce 自定义代码将项目添加到购物车后立即删除
我正在尝试设置自定义优惠券代码,以便客户可以将附加产品添加到他们的购物车中,前提是他们的购物车总额为 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;
}
}
我终其一生都无法弄清楚出了什么问题。任何帮助将不胜感激。
解决方法
下面,我们从小计计算中排除了附加商品,因此我们不需要将附加商品价格添加到阈值金额(因此我们保留您的步骤 1、2 和 4)。
重新访问的代码:
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,avoiding the hook repetition
if ( ! is_user_logged_in() || did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
$addon_product_id = 7039; // ID of the addon item
$threshold_amount = 50; // The threshold amount
$cart_items_total = 0; // Initializing
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item_key => $cart_item ){
// For Add-On product: Check if it is in cart
if ( in_array( $addon_product_id,[$cart_item['product_id'],$cart_item['variation_id']] ) ) {
$addon_item_key = $cart_item_key;
}
// For other items: add their line total including taxes to items subtotal
else {
// Sum dicounted line total incl. taxes to get other items subtotal
$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 && isset($addon_item_key) ) {
$cart->remove_cart_item( $addon_item_key );
}
}
代码位于活动子主题(或活动主题)的functions.php 文件中。经测试有效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。