Orders in bulk verwijderen (WooCommerce)

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

WordPress lijkt niet te zijn gebouwd om via de interface duizenden orders te verwijderen. Gelukkig kan dit gemakkelijk in SQL, en naar het zich laat aanzien, op een veilige manier:

WP-CLI

Met succes toegepast (23 sep. 2020 - ontwikkelomgeving - Ca. 2 tot 5 orders per seconde, dus het kost tijd) [1]:

wp post delete $(wp post list --field=ID --post_type="shop_order") --force

Details:

Het commando

wp post list --post_type="shop_order"

toont een tabel met allerlei info van alle posts van het type shop_order.

Het commando

wp post list --field=ID --post_type="shop_order"

toont alleen de ID's. Deze ID's worden vervolgens als input gebruikt voor het commando wp post delete.

De flag --force zorgt ervoor, dat deze orders rechtstreeks verwijderd worden, en niet in de prullenbak belanden.

SQL

Is dit wel betrouwbaar? Blijft er geen data achter, bv. in tabel w_woocommerce_order_items?

Verplaats alle orders naar trash

UPDATE wp_posts SET post_status = 'trash' WHERE post_type = 'shop_order';

of

UPDATE wp_posts SET post_status = 'trash' WHERE post_type = 'shop_order' and post_status="wc-completed";

Leeg trash

Legen van trash als daar veel items in zitten, kan ook problematisch zijn. Gelukkig is ook dat te automatiseren:

DELETE FROM wp_posts
WHERE post_type = 'shop_order' 
AND post_status = ‘trash’

Toch heb ik m'n twijfels of deze methode wel ok is, zo zonder de WC-API te gebruiken.

Bronnen