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

Posted

技术标签:

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

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

现在:

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

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

【问题讨论】:

【参考方案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 值,如果是的话

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

【讨论】:

坏主意。在清空购物车时,您并不总是希望丢失所有会话变量。 它不是删除会话值只是为了删除错误记录并更正数据库结构

以上是关于在 WooCommerce 中添加到购物车之前清空购物车的主要内容,如果未能解决你的问题,请参考以下文章

添加到 WooCommerce 购物车时如何重置所有字段

在 Woocommerce 中单击后将添加到购物车按钮更改为查看购物车按钮

在 Woocommerce 中的产品摘要下方添加额外的添加到购物车按钮

在 Woocommerce 中隐藏已添加到购物车的消息

WooCommerce 产品循环中添加 Ajax 选项的复选框添加到购物车

在 Woocommerce 中根据 IP 地址(GeoLocation)更改添加到购物车按钮