WooCommerce: Bulk Delete Orders / Products Super Fast

There are times when you have thousands of WooCommerce orders, products, categories, tags, coupons, customers or custom fields and the “Bulk Edit > Delete” option in the WordPress dashboard is simply not cost- and time-effective.

Maybe because your website goes down as it can’t process that much information at the same time, or maybe because you’re on a low budget and can’t afford to hit “delete” 100 or 1000 times by hand.

Thankfully, WooCommerce information is stored in the WordPress database, which means we can access it, write a “SQL DELETE statement”, and bulk delete anything you like, in seconds. Of course, and you will find warnings below, NEVER DO THIS on a live website as I can’t guarantee this won’t have any side effects.

So, have fun!

How to Access the WordPress Database

Your hosting control panel should have a “phpMyAdmin” icon or link. This will allow you to login to your database. Here’s an example with SiteGround hosting.

Now, select your database from the left and once its tables get listed in the right panel note down the database tables prefix. By default this is “wp_“, but each WordPress install could possibly use a different custom prefix. In my case it’s “apos_“, as you can see from the screenshot.

Then, go to the “SQL” tab and write one of the DELETE statements you find below, based on what you need to erase. Of course, you must change all the occurrences of “wp_” to your custom WordPress database table prefix (“apos_” in my case). That’s it!

1. Bulk Delete All Orders

DELETE FROM wp_woocommerce_order_itemmeta;
DELETE FROM wp_woocommerce_order_items;
DELETE FROM wp_comments WHERE comment_type = 'order_note';
DELETE FROM wp_postmeta WHERE post_id IN ( SELECT ID FROM wp_posts WHERE post_type = 'shop_order' );
DELETE FROM wp_posts WHERE post_type = 'shop_order';

2. Bulk Delete All Products

DELETE FROM wp_postmeta WHERE post_id IN ( SELECT ID FROM wp_posts WHERE post_type IN ( 'product', 'product_variation' ));
DELETE FROM wp_posts WHERE post_type IN ( 'product', 'product_variation' );

3. Bulk Delete All Trashed Products

DELETE FROM wp_postmeta WHERE post_id IN ( SELECT ID FROM wp_posts WHERE post_type = 'product' AND post_status = 'trash' );
DELETE FROM wp_posts WHERE post_type = 'product' AND post_status = 'trash';

4. Bulk Delete All Coupons

DELETE FROM wp_postmeta WHERE post_id IN ( SELECT ID FROM wp_posts WHERE post_type = 'shop_coupon' );
DELETE FROM wp_posts WHERE post_type = 'shop_coupon';

5. Bulk Delete All Order Notes

DELETE FROM wp_commentmeta WHERE comment_id IN ( SELECT ID FROM wp_comments WHERE comment_type = 'order_note' );
DELETE FROM wp_comments WHERE comment_type = 'order_note';

Related content

  • WooCommerce: 10 Crucial Issues That Should Be Fixed Right Now
    I just spent the last 3 days in Porto with another 2,300 WordPressers at the first in-person WordCamp Europe since Berlin 2019. I had a blast, held a nice (yet long) workshop, spoke to many, but got tired too soon. Later on, I realized that that tiredness was something more serious – in fact I […]
  • WooCommerce: Search Orders By SKU @ Admin
    Exactly. By default, when you search for orders in the WordPress > WooCommerce > Orders backend, using a SKU will give you 0 results. Which is pretty poor for a store manager. Let’s change this. Despite the code is a little complex, all you need is a simple copy & paste. Enjoy!
  • WooCommerce Database Explained: How It Works and Where To Find Data
    The term “database” is widely used and known to millions of people, but the proportion of people who have it in their vocabulary without understanding what it describes is sizable. Databases are at the core of so many digital services today that it is easy to overlook them entirely, but whether you run a shopping […]
  • WooCommerce: The Need For Custom Order Tables
    Scaling WooCommerce stores while ensuring optimum performance and pushing a store live from staging while keeping all the orders and customers intact are significant problems stores face, even today.  Each time a consumer places an order on a WooCommerce store, it adds dozens of order data and entries to the WordPress postmeta database table – […]

Rodolfo Melogli

Business Bloomer Founder

Author, WooCommerce expert and WordCamp speaker, Rodolfo has worked as an independent WooCommerce freelancer since 2011. His goal is to help entrepreneurs and developers overcome their WooCommerce nightmares. Rodolfo loves travelling, chasing tennis & soccer balls and, of course, wood fired oven pizza. Follow @rmelogli

34 thoughts on “WooCommerce: Bulk Delete Orders / Products Super Fast

  1. Hi Rodolfo,
    Many thanks for sharing this valuable information.

    With 1.Bulk Delete All Orders
    DELETE FROM wp_woocommerce_order_itemmeta;
    DELETE FROM wp_woocommerce_order_items;
    DELETE FROM wp_comments WHERE comment_type = ‘order_note’;
    DELETE FROM wp_postmeta WHERE post_id IN ( SELECT ID FROM wp_posts WHERE post_type = ‘shop_order’ );
    DELETE FROM wp_posts WHERE post_type = ‘shop_order’;

    I would prefer to delete all orders before a specific date 1.01.2020 only. What changes in the SQL should be done for that?

    1. Hello Ken, thanks so much for your comment! Yes, this is definitely possible, but I’m afraid it’s custom work. If you’d like to get a quote, feel free to contact me here. Thanks a lot for your understanding!

  2. Thank you soooooo much for sharing this method. It saved me a lot of time. I love it!

  3. Thanks for this! Saved me a lot of time and helped make sure I wasn’t leaving orphaned records all over the place.

    Cheers!

      1. I just deleted about 20,000 guest orders in under 5 min.
        Thank you!

  4. Good evening.

    Sorry to bother you. We came across your website by accident and applied your SQL commands.
    Why we are writing to you today is because WP or WOOCOMMERCE Support were unable and/or unwilling to provide us with the much needed SQL command.

    We just want to list and save the complete products in 4 languages including metadata, categories and subcategories and the assignment of the images per article. (We don’t want a CSV file and/or a backup)

    We will then delete the SQl database and set it up from scratch.

    We would appreciate if you could provide us the relevant command. If you incur costs as a result, we will be happy to pay them for you.

    Awaiting a reply from you, thank you in advance.

    Kind regards
    Matti

    1. Hello Matti, thanks so much for your comment! Yes, this is definitely possible, but I’m afraid it’s custom work. If you’d like to get a quote, feel free to contact me here. Thanks a lot for your understanding!

  5. Hi

    Thank you for the article. This could be our savior.

    Our website is currently under attack by a low-life who is someone generating fake orders and in the last 24 hours there have been over 2000 of them!!!!! We simply cannot delete the Failed orders fast enough. Nor have we been able to stop the attack.

    I guess my question is – can FAILED orders be cancelled in the manner you are suggesting and how much would you charge to do this for us?

    Thank you very much

    1. Hello Bryan – yes the SQL statement can be adjusted to only include failed orders. However, I fear you may need to secure your website first as you can’t keep deleting stuff every day… Anyhow, if you’d like to get a quote, feel free to contact me here.

  6. Can we delete the coupons in bulk but from a specific date ?

    1. Hi Suhail, thanks so much for your comment! Yes, this is definitely possible, but I’m afraid it’s custom work. If you’d like to get a quote, feel free to contact me here. Thanks a lot for your understanding!

  7. Is there a way to delete all “customer” role accounts?

    1. I’m sure some SQL can be written to achieve that, just I don’t have that right now. If you’d like to get a quote, feel free to contact me here. Thanks a lot for your understanding!

  8. Is it possible to delete all order data in the Analyics too ?

    1. I’m sure there is a way. I don’t use Analytics so I didn’t bother researching it

  9. how to remove all product tag ?

  10. Hi, thank you for that snipped. I found a problem that data form deleted orders exists in Woocommerce Analytics.

    1. Not a problem of mine, I have that disabled LOL πŸ˜€

      Seriously, I’m sure that’s possible but you’d need to figure out where the Woo Admin data goes inside the DB and add those delete statements to that

  11. Hi,

    Thanks for your posts!

    How can i delete products with determitated date?, or products without images?

    Thanks a lot!, sorry about my english bro

    1. Hi bro, thanks so much for your comment! Yes, this is definitely possible, but I’m afraid it’s custom work. If you’d like to get a quote, feel free to contact me here. Thanks a lot for your understanding!

  12. Hi
    Thank you for this tuto πŸ™‚

    There’s an error #5

    DELETE FROM wp_commentmeta WHERE comment_id IN ( SELECT ID FROM wp_comments WHERE comment_type = 'order_note' );

    We have no ID in “wp_comments”, so impossible to delete the Ordre Note.
    What ID we can take?

    Olivier

  13. What about the download product permissions table ?

    1. Not 100% sure. Have you found that out?

  14. You’re missing a parenthasis in #2

      1. Still getting an error on #2.

  15. Can you bulk delete products associated with a certain category?

    1. Hello Cor, thanks so much for your comment! Yes, this is definitely possible, but I’m afraid it’s custom work. If you’d like to get a quote, feel free to contact me here. Thanks a lot for your understanding!

Leave a Reply

Your email address will not be published. Required fields are marked *