在 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_Cart
add_to_cart()
方法和WC_Ajax
add_to_cart()
方法中……任何人都无法重现您的问题、您的设置、您的安装和插件……
@Ram 我添加了另一个不同的钩子函数,它可能适用于您的情况……请尝试一下,如果它有效,请告诉我……谢谢。
我不确定为什么第一个不起作用。但是你分享的第二个过滤器就像一个魅力。谢谢 LoicTheAztec
@ LoicTheAztec 我已经对答案投了赞成票,再次感谢。【参考方案2】:
转到您的站点数据库并查找表 'wp_woocommerce_sessions' 并查看其 'session_id' 列是否包含 0 值,如果是的话
-
删除所有这 0 条记录
将“session_id”列设为主要列。
使“session_id”列自动递增。
【讨论】:
坏主意。在清空购物车时,您并不总是希望丢失所有会话变量。 它不是删除会话值只是为了删除错误记录并更正数据库结构以上是关于在 WooCommerce 中添加到购物车之前清空购物车的主要内容,如果未能解决你的问题,请参考以下文章
在 Woocommerce 中单击后将添加到购物车按钮更改为查看购物车按钮
在 Woocommerce 中的产品摘要下方添加额外的添加到购物车按钮