Orders in bulk verwijderen (WooCommerce): verschil tussen versies
(10 tussenliggende versies door dezelfde gebruiker niet weergegeven) | |||
Regel 1: | Regel 1: | ||
− | + | == WP-CLI == | |
− | == Verplaats alle orders naar trash == | + | Met succes toegepast (23 sep. 2020 - ontwikkelomgeving - Ca. 2 tot 5 orders per seconde, dus het kost tijd) [https://wordpress.org/support/topic/tip-how-to-delete-all-your-orders-and-save-you-time/]: |
+ | |||
+ | <pre> | ||
+ | wp post delete $(wp post list --field=ID --post_type="shop_order") --force | ||
+ | </pre> | ||
+ | |||
+ | Details: | ||
+ | |||
+ | Het commando | ||
+ | |||
+ | <pre> | ||
+ | wp post list --post_type="shop_order" | ||
+ | </pre> | ||
+ | toont een tabel met allerlei info van alle posts van het type ''shop_order''. | ||
+ | |||
+ | Het commando | ||
+ | |||
+ | <pre> | ||
+ | wp post list --field=ID --post_type="shop_order" | ||
+ | </pre> | ||
+ | |||
+ | toont alleen de ID's. Deze ID's worden vervolgens als input gebruikt voor het commando <code>wp post delete</code>. | ||
+ | |||
+ | De ''flag'' <code>--force</code> zorgt ervoor, dat deze orders rechtstreeks verwijderd worden, en niet in de prullenbak belanden. | ||
+ | |||
+ | == SQL == | ||
+ | |||
+ | Waarom dit in SQL doen? | ||
+ | |||
+ | * Omdat ik soms alleen toegang heb tot de database, zonder een bijbehorende WordPress-installatie | ||
+ | * Omdat de WP-CLI niet altijd beschikbaar is, of functioneert | ||
+ | * Omdat het kan. | ||
+ | |||
+ | Is dit wel betrouwbaar? Blijft er geen data achter, bv. in tabel <code>w_woocommerce_order_items</code>? | ||
+ | |||
+ | === Verplaats alle orders naar trash === | ||
<pre> | <pre> | ||
Regel 13: | Regel 48: | ||
</pre> | </pre> | ||
− | == Leeg trash == | + | === Leeg trash === |
Legen van ''trash'' als daar veel items in zitten, kan ook problematisch zijn. Gelukkig is ook dat te automatiseren: | Legen van ''trash'' als daar veel items in zitten, kan ook problematisch zijn. Gelukkig is ook dat te automatiseren: | ||
Regel 24: | Regel 59: | ||
Toch heb ik m'n twijfels of deze methode wel ok is, zo zonder de WC-API te gebruiken. | Toch heb ik m'n twijfels of deze methode wel ok is, zo zonder de WC-API te gebruiken. | ||
+ | |||
+ | === In één keer === | ||
+ | |||
+ | Orderregels e.d. moet je apart verwijderen: Dat gaat niet via ''cascaded deletion'': | ||
+ | |||
+ | <pre> | ||
+ | delete from wp_posts where post_type = 'shop_order'; | ||
+ | delete from wp_woocommerce_order_items; | ||
+ | delete from wp_woocommerce_order_itemmeta; | ||
+ | delete from wp_wc_order_stats; | ||
+ | </pre> | ||
== Bronnen == | == Bronnen == | ||
* https://stackoverflow.com/questions/24904413/how-to-delete-completed-orders-in-woocommerce-using-a-my-sql-query | * https://stackoverflow.com/questions/24904413/how-to-delete-completed-orders-in-woocommerce-using-a-my-sql-query | ||
+ | * https://wordpress.org/support/topic/tip-how-to-delete-all-your-orders-and-save-you-time/ |
Huidige versie van 25 mei 2022 om 18:38
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
Waarom dit in SQL doen?
- Omdat ik soms alleen toegang heb tot de database, zonder een bijbehorende WordPress-installatie
- Omdat de WP-CLI niet altijd beschikbaar is, of functioneert
- Omdat het kan.
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.
In één keer
Orderregels e.d. moet je apart verwijderen: Dat gaat niet via cascaded deletion:
delete from wp_posts where post_type = 'shop_order'; delete from wp_woocommerce_order_items; delete from wp_woocommerce_order_itemmeta; delete from wp_wc_order_stats;