在添加到WooCommerce中的购物车之前先清空购物车

Ram*_*Ram 3 php wordpress product cart woocommerce

我正在使用带有Woo订阅的WP Job Manager。

现在:

  1. 最初,我选择了一个包裹(Woo订阅)
  2. 然后,我添加了所有详细信息。
  3. 但是没有提交。
  4. 回到网站,因此要再次购买,我需要选择一个包裹。因此,我选择了包裹并填写了详细信息,然后转到付款包裹。
  5. 现在,在我的购物车中,两个包装都同时存在(即我选择的是第一次购买而不是最近购买的一个)
  6. 如何解决此问题,以便最后选择的一项在购物车中,而较早的一项则在选择最新的一项后立即删除。

我尝试了这个Woocommerce从购物车中删除所有产品并将当前产品添加到购物车, 但没有帮助。

Loi*_*tec 10

更新(2点不同的选择)

您应该尝试以下方法:

add_filter( 'woocommerce_add_to_cart_validation', 'remove_cart_item_before_add_to_cart', 20, 3 );
function remove_cart_item_before_add_to_cart( $passed, $product_id, $quantity ) {
    if( ! WC()->cart->is_empty() )
        WC()->cart->empty_cart();
    return $passed;
}
Run Code Online (Sandbox Code Playgroud)

代码进入您的活动子主题(或主题)的functions.php文件中经过测试,可与ajax添加到购物车和普通添加到购物车一起使用…


或者,您可以使用另一种可以将购物车中最后添加的商品保留在购物车中的商品:

// Keep only last cart item
add_action( 'woocommerce_before_calculate_totals', 'keep_only_last_cart_item', 30, 1 );
function keep_only_last_cart_item( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    $cart_items = $cart->get_cart();

    if( count( $cart_items ) > 1 ){
        $cart_item_keys = array_keys( $cart_items );
        $cart->remove_cart_item( reset($cart_item_keys) );
    }
}
Run Code Online (Sandbox Code Playgroud)

代码进入您的活动子主题(或主题)的function.php文件中经过测试和工作