在 WooCommerce 中添加到购物车之前清空购物车
Empty cart before add to cart in WooCommerce
我正在使用带有 Woo 订阅的 WP 作业管理器。
现在:
- 最初,我select编辑了一个包(Woo 订阅)
- 然后我添加了所有细节。
- 但是没有提交
- 回到网站,所以要再次购买我需要 select 一个包裹。所以我select编辑了包裹并填写了详细信息,然后去了付款包裹。
- 现在我的购物车中有两个包裹(即我第一次 select 没有购买的那个和最近的那个)
- 如何解决这个问题,以便最新的 selected 放在购物车中,较早的一个在最新的 selected 后立即删除。
我尝试了这个 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 文件。 已测试并有效
转到您的站点数据库并查找 table 'wp_woocommerce_sessions' 并查看其 'session_id' 列是否包含 0 值,如果是
- 删除所有这 0 条记录
- 将 'session_id' 列作为主要列。
- 使'session_id'列自动递增。
我正在使用带有 Woo 订阅的 WP 作业管理器。
现在:
- 最初,我select编辑了一个包(Woo 订阅)
- 然后我添加了所有细节。
- 但是没有提交
- 回到网站,所以要再次购买我需要 select 一个包裹。所以我select编辑了包裹并填写了详细信息,然后去了付款包裹。
- 现在我的购物车中有两个包裹(即我第一次 select 没有购买的那个和最近的那个)
- 如何解决这个问题,以便最新的 selected 放在购物车中,较早的一个在最新的 selected 后立即删除。
我尝试了这个 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 文件。 已测试并有效
转到您的站点数据库并查找 table 'wp_woocommerce_sessions' 并查看其 'session_id' 列是否包含 0 值,如果是
- 删除所有这 0 条记录
- 将 'session_id' 列作为主要列。
- 使'session_id'列自动递增。