在Woocommerce中添加到购物车之前的空车

时间:2018-03-20 10:47:44

标签: php wordpress woocommerce cart product

我正在使用WP作业管理器和Woo订阅。

现在:

  1. 最初我选择了一个包(woo subscription)

  2. 然后我添加了所有细节。

  3. 但没有提交。
  4. 回到网站,所以再次购买我需要选择一个包。所以我选择了包裹并填写了详细信息并转到了付款包。
  5. 现在我的购物车中有两个包裹(即我选择的没有第一次购买的包裹和最近的包裹)
  6. 如何解决这个问题,以便最新选择的一个在购物车中,之前的一个被删除,只要选择了最新的一个。
  7. 我试过这个Woocommerce Delete all products from cart and add current product to cart但没有帮助。

2 个答案:

答案 0 :(得分:5)

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

代码进入活动子主题(或主题)的function.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文件。 经过测试并正常工作

答案 1 :(得分:-1)

转到您的站点数据库,查找表“ wp_woocommerce_sessions”,然后查看其“ session_id”列是否包含0值

  1. 删除所有这0条记录
  2. 将“ session_id”列设为主要内容。
  3. 使“ session_id”列自动递增。