Orders in bulk verwijderen (WooCommerce)
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
Iets meer in 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.