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

Empty cart before add to cart in WooCommerce

我正在使用带有 Woo 订阅的 WP 作业管理器。

现在:

  1. 最初,我select编辑了一个包(Woo 订阅)
  2. 然后我添加了所有细节。
  3. 但是没有提交
  4. 回到网站,所以要再次购买我需要 select 一个包裹。所以我select编辑了包裹并填写了详细信息,然后去了付款包裹。
  5. 现在我的购物车中有两个包裹(即我第一次 select 没有购买的那个和最近的那个)
  6. 如何解决这个问题,以便最新的 selected 放在购物车中,较早的一个在最新的 selected 后立即删除。

我尝试了这个 Woocommerce Delete all products from cart and add current product to cart 但没有帮助。

已更新 (有 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;
}

代码进入您活跃的子主题(或主题)的 functions.php 文件经过测试, 可用于 ajax-add-to-cart 和正常 add-to-cart…


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

// 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) );
    }
}

代码进入您活跃的子主题(或主题)的 function.php 文件已测试并有效

转到您的站点数据库并查找 table 'wp_woocommerce_sessions' 并查看其 'session_id' 列是否包含 0 值,如果是

  1. 删除所有这 0 条记录
  2. 将 'session_id' 列作为主要列。
  3. 使'session_id'列自动递增。