如何清空Woocommerce购物车

29

我想知道如何使用WooCommerce在页面加载时清空购物车中的内容。

我发现可以通过在functions.php中添加以下内容来添加一个清空购物车按钮:

add_action( 'init', 'woocommerce_clear_cart_url' );
function woocommerce_clear_cart_url() {
  global $woocommerce;

    if ( isset( $_GET['empty-cart'] ) ) {
        $woocommerce->cart->empty_cart(); 
    }
}

但我想知道如何在主页加载时触发它(如果您可以指定确切的页面,那将非常好,但即使是主页也很有用)

有什么想法吗?谢谢!

8个回答

45

更新后的版本为:

WC()->cart->empty_cart();

19

如果只想在网站首页触发功能,你的函数应该像这样:

add_action( 'init', 'woocommerce_clear_cart_url' );
function woocommerce_clear_cart_url() {
  global $woocommerce;

    if ( is_front_page() && isset( $_GET['empty-cart'] ) ) { 
        $woocommerce->cart->empty_cart(); 
    }
}

is_front_page()函数仅在WordPress网站的首页返回true。此外,您可以使用is_page()函数检测其他任何页面,其中您可以传递任何页面标题、ID或slug。


这对我有用,但我必须删除页面和变量检查,直接运行 $woocommerce->cart->empty_cart(); - codacopia
这就是完整的答案,应该标记为正确解决方案。我只需要将 $woocommerce->cart->empty_cart(); 替换为更新版本的 WC()->cart->empty_cart(); - João Teixeira
@JoãoTeixeira,你是如何在购物车页面上添加清空按钮的? - user9437856
add_action('woocommerce_after_cart_table', [$this, 'add_empty_cart_button_to_cart']); public function add_empty_cart_button_to_cart() { ob_start(); ?> 清空购物车 - Morten Bak

7

以上代码都不能在我的WordPress安装(4.9.6)上工作。因此,我更改了add_action并删除了请求变量,直接运行。

现在,我的WooCommerce插件可以在用户退出结账页面时清除购物车中的商品,而不会出现任何重复错误。感谢大家的帮助。

add_action( 'woocommerce_add_cart_item_data', 'woocommerce_clear_cart_url' );

function woocommerce_clear_cart_url() {

    global $woocommerce;
    $woocommerce->cart->empty_cart();
} 

4

以上的代码都无法在我的网站上运行。我在最新的WordPress版本5.4.1中测试了以下函数,它可以完美地工作!

/**
Clears WC Cart on Page Load
(Only when not on cart/checkout page)
*/

add_action( 'wp_head', 'wc_clear_cart' );
function wc_clear_cart() {
    if ( wc_get_page_id( 'cart' ) == get_the_ID() || wc_get_page_id( 'checkout' ) == get_the_ID() ) {
        return;
    }
    WC()->cart->empty_cart( true );
}

4
您可以直接调用以下 WooCommerce 核心函数:
WC()->cart->empty_cart();

清空购物车会话:
WC()->session->set('cart', array());

谢谢


1
如果您想要清除会话,您只需要在 empty_cart(true) 方法中添加 true 参数即可。 - Kuliraj

2

试一下这个。我希望它能帮助你。

add_action( 'init', 'woocommerce_clear_cart_url' );
function woocommerce_clear_cart_url() {
  global $woocommerce;

  if (strpos($_SERVER['REQUEST_URI'], '/checkout')  <  0 ) 
  {
         $woocommerce->cart->empty_cart();
  }
}

1

上述方法对我没有起作用,所以我需要一些不依赖于WordPress条件的东西:

/*empty cart if user come to homepage*/
add_action( 'init', 'woocommerce_clear_cart_url' );
function woocommerce_clear_cart_url() {
global $woocommerce;

if ($_SERVER['REQUEST_URI'] === '/') { 
    $woocommerce->cart->empty_cart(); 
 }
}

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接