Orders in bulk verwijderen (WooCommerce): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(7 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 1: Regel 1:
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 ==
 
== WP-CLI ==
  
[https://wordpress.org/support/topic/tip-how-to-delete-all-your-orders-and-save-you-time/]: Da's interessant! Bv.:
+
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>
 
<pre>
 
wp post delete $(wp post list --field=ID --post_type="shop_order") --force
 
wp post delete $(wp post list --field=ID --post_type="shop_order") --force
 
</pre>
 
</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 ==
 
== 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>?
 
Is dit wel betrouwbaar? Blijft er geen data achter, bv. in tabel <code>w_woocommerce_order_items</code>?
Regel 36: 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 ==

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;

Bronnen