Orders in bulk verwijderen (WooCommerce): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
(Nieuwe pagina aangemaakt met '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...')
 
 
(11 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 ==
  
== 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 11: Regel 46:
 
<pre>
 
<pre>
 
UPDATE wp_posts SET post_status = 'trash' WHERE post_type = 'shop_order' and post_status="wc-completed";
 
UPDATE wp_posts SET post_status = 'trash' WHERE post_type = 'shop_order' and post_status="wc-completed";
<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 ==
 +
 +
* 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;

Bronnen