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

标签 php wordpress woocommerce cart product

我正在将 WP Job Manager 与 Woo Subscriptions 一起使用。

现在:

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

我试过这个 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 文件经过测试并有效

关于php - 在 WooCommerce 中添加到购物车之前清空购物车,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49382193/

相关文章:

php - 使用 ZVAL_STRING 避免 PHP 引擎崩溃

html - H1 和网站内容从横幅中消失,就好像它们的上边距为负数一样

wordpress - 如何更改 Woocommerce "Sort By"文本?

php - 在 Woocommerce 中移动设备上的图片库上方移动标题和评级

php - 如何从 WooCommerce 子类别产品计数中删除括号

php - 在 Woocommerce 中为特定国家/地区自定义计算运输方式成本

php - 联系表未发送

php - 从 PHP 文件获取数组并在另一个 PHP 文件中使用

php - Codeigniter 多个 where 条件

php - <?php language_attributes(); ?> 在 html 标签上