Search code examples
phpwordpresswoocommercecart

Clearing cart in WooCommerce


I've encountered a weird thing in WP WooCommerce and I can't understand nor fix it myself.

Thing is I've added a clear button in my checkout page, that button redirects me to my homepage and adds a ?clear param. Then I check if that param is set and if it is set then the cart is cleared;

Code:

if(isset($_POST["clear_cart"]))
{
    header("Location: https://examplepage.com?clear");
}

add_action( 'init', 'woocommerce_clear_cart_url' );

function woocommerce_clear_cart_url() 
{
    global $woocommerce;

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

Now the bug/error thing.

This code works... Once. I'll do my best to explain now. When I click the clear button for the first time - it works. I'm being redirected to my homepage, cart is cleared, everything works.

When I go and add some products again and then I clear the cart I get redirected to my homepage again (first 4 lines of code) but my cart isn't cleared now. To get it cleared I have to change my param to something like

?clear=true

Then I do the same thing and after clicking clear cart button it redirects me again and the cart isn't cleared. If I again change the param to

?clear=true

it doesn't work this time - because it worked before. Changing the param to

?clear=true1

clears the cart.

I hope you've already understand what I'm talking about. I've tried various params instead of "clear" and everytime the same thing happens.

When I also tried echoing something within

function woocommerce_clear_cart_url() 

it also worked only once. I'm out of ideas.

Thank you.


Solution

  • Try below code

    add_action( 'init', 'woocommerce_clear_cart_url' );
    function woocommerce_clear_cart_url() {
      global $woocommerce;
      if(isset($_POST["clear_cart"]))
      {
        $data= $woocommerce->cart->empty_cart(); 
        if(is_null($data) == 1 ){
         wp_redirect( site_url() ); 
         exit; 
      }
    }
    

    Assuming your html code is something like below :

    <form method="post">
     <input type="submit" name="clear_cart" value="1"> 
    </form>