【问题标题】:WooCommerce custom code deleting item as soon as it's added to cartWooCommerce 自定义代码将项目添加到购物车后立即删除
【发布时间】: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 美元之间,那么插件项目一添加就会立即删除。

我希望操作顺序会发生

  1. 检查购物车总额,发现超过 50 美元
  2. 允许我添加插件项目
  3. 检查包含插件项目的购物车总额,发现现在超过 60 美元
  4. 允许插件保留

基于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


    【解决方案1】:

    下面,我们从小计计算中排除了附加项目,因此我们不需要将附加价格添加到阈值金额(因此我们保留您的步骤 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 文件中。经过测试并且可以工作。

    【讨论】:

    • 非常感谢!如果您不介意我问,为什么在前面的代码不起作用时这会起作用?
    • @SIGdesign 首先,如果这个答案回答了你的问题,你可以请accept 回答,谢谢。解决方案在开头进行了说明(不包括要在购物车总数和阈值金额中相加的附加价格)。
    猜你喜欢
    • 1970-01-01
    • 2017-04-21
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 2017-10-14
    • 2018-05-18
    相关资源
    最近更新 更多