【问题标题】:Empty cart before add to cart in WooCommerce在 WooCommerce 中添加到购物车之前清空购物车
【发布时间】:2018-08-29 03:33:12
【问题描述】:

我正在将 WP Job manager 与 Woo 订阅一起使用。

现在:

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

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

【问题讨论】:

    标签: php wordpress woocommerce cart product


    【解决方案1】:

    更新(有两种不同的选择)

    您应该尝试以下方法:

    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 文件中经过测试且有效

    【讨论】:

    • 感谢您的快速响应好友,我在functions.php 中添加了这个过滤器,但它不起作用。使用“Ajax”选择包我不确定这是否导致问题。 -Select Package-->AddPosting->CheckOut页面是流程。
    • @Ram 此代码经过测试,可完美地与添加到购物车 ajax 和正常添加到购物车一起使用。我使用的钩子位于普通的WC_Cartadd_to_cart() 方法和WC_Ajaxadd_to_cart() 方法中……任何人都无法重现您的问题、您的设置、您的安装和插件……
    • @Ram 我添加了另一个不同的钩子函数,它可能适用于您的情况……请尝试一下,如果它有效,请告诉我……谢谢。
    • 我不确定为什么第一个不起作用。但是你分享的第二个过滤器就像一个魅力。谢谢 LoicTheAztec
    • @ LoicTheAztec 我已经对答案投了赞成票,再次感谢。
    【解决方案2】:

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

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

    【讨论】:

    • 坏主意。在清空购物车时,您并不总是希望丢失所有会话变量。
    • 它不是删除会话值只是为了删除错误记录并更正数据库结构
    猜你喜欢
    • 2020-04-28
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-10
    • 2020-10-28
    • 2020-05-30
    相关资源
    最近更新 更多