为了账号安全,请及时绑定邮箱和手机立即绑定

根据 WooCommerce 购物车总数添加或删除特定购物车项目

根据 WooCommerce 购物车总数添加或删除特定购物车项目

PHP
不负相思意 2022-10-28 09:38:48
如果订单总额高于 199.99 美元,我正在尝试将免费产品添加到购物车我已经实现了这一点并且它正在发挥作用。问题是,如果用户随后从购物车中删除了一个商品并再次低于 199.99 美元(以防止游戏系统),我需要删除该产品。我所拥有的似乎正在工作。问题是,在 REMOVE FROM CART 操作似乎起作用(或刷新页面)之前,我似乎需要单击 2 个链接。这是什么原因造成的?是否可以通过 AJAX 完成删除操作?// -------------------------------------------// ADD PRODUCT IF ORDER MINIMUM ABOVE 200/** Automatically adding the product to the cart when cart total amount reach to $199.99.*/function aapc_add_product_to_cart() {    global $woocommerce;    $cart_total = 199.99;       if ( $woocommerce->cart->total >= $cart_total ) {        if ( is_user_logged_in() ) {            $free_product_id = 339;  // Product Id of the free product which will get added to cart            $found      = false;            //check if product already in cart            if ( sizeof( WC()->cart->get_cart() ) > 0 ) {                foreach ( WC()->cart->get_cart() as $cart_item_key => $values ) {                    $_product = $values['data'];                    if ( $_product->get_id() == $free_product_id )                        $found = true;                                  }                // if product not found, add it                if ( ! $found )                    WC()->cart->add_to_cart( $free_product_id );            } else {                // if no products in cart, add it                WC()->cart->add_to_cart( $free_product_id );            }                }    }    if ( $woocommerce->cart->total <= $cart_total && $found ) {                WC()->cart->remove_cart_item( $free_product_id );            }       }add_action( 'template_redirect', 'aapc_add_product_to_cart' );add_action( 'template_redirect', 'remove_product_from_cart_programmatically' );
查看完整描述

1 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

您不应该使用template_redirect钩子根据购物车的总阈值添加或删除免费产品……此外,您的代码有点过时并存在一些错误。


而是使用woocommerce_before_calculate_totals启用 Ajax 的钩子,这样:


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 = 200; // The threshold amount for cart total

    $free_product_id  = 339; // ID of the free product

    $cart_items_total = 0; // Initializing


    // 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() == $free_product_id ) {

            $free_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 up to the defined amount and if the free products is not in cart, we add it.

    if ( $cart_items_total >= $threshold_amount && ! isset($free_item_key) ) {

        $cart->add_to_cart( $free_product_id );

    }

    // If cart total is below the defined amount and free product is in cart, we remove it.

    elseif ( $cart_items_total < $threshold_amount && isset($free_item_key) ) {

        $cart->remove_cart_item( $free_item_key );

    }

}

代码在您的活动子主题(或活动主题)的functions.php 文件中。测试和工作。


查看完整回答
反对 回复 2022-10-28
  • 1 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信