Introducción
En tiendas WooCommerce con varios años de actividad, la base de datos puede llenarse de pedidos antiguos que ya no son útiles. Estos datos ralentizan el backend, afectan el rendimiento general y hacen más pesada la administración.
En esta guía te mostramos cómo eliminar pedidos antiguos en WooCommerce usando SQL, sin romper relaciones ni integridad de la base.
Índice
- 1. Tablas que intervienen en los pedidos
- 2. Cómo localizar pedidos antiguos
- 3. SQL para eliminar pedidos por fecha o estado
- 4. Cómo eliminar los metadatos relacionados
- 5. Hacer copia de seguridad antes de borrar
- 6. Automatizar esta limpieza con cron
- 7. Buenas prácticas y precauciones
- 8. Conclusión
1. Tablas implicadas en pedidos
Un pedido en WooCommerce se guarda como un post_type = 'shop_order'
. Está relacionado con:
Tabla | Descripción |
---|---|
wp_posts | Contiene los pedidos (como posts) |
wp_postmeta | Datos del pedido (totales, dirección, métodos) |
wp_woocommerce_order_items | Líneas del pedido (productos comprados) |
wp_woocommerce_order_itemmeta | Metadatos de cada línea |
2. Localizar pedidos antiguos
SELECT ID, post_date, post_status FROM wp_posts WHERE post_type = 'shop_order' AND post_date < '2022-01-01';
🔎 Cambia la fecha para tu criterio y usa filtros como post_status = 'wc-completed'
para conservar los activos.
3. Eliminar pedidos por SQL
Primero eliminas los ítems del pedido:
DELETE itemmeta FROM wp_woocommerce_order_items AS items JOIN wp_woocommerce_order_itemmeta AS itemmeta ON itemmeta.order_item_id = items.order_item_id WHERE order_id IN ( SELECT ID FROM wp_posts WHERE post_type = 'shop_order' AND post_date < '2022-01-01' );
Luego los ítems:
DELETE FROM wp_woocommerce_order_items WHERE order_id IN ( SELECT ID FROM wp_posts WHERE post_type = 'shop_order' AND post_date < '2022-01-01' );
4. Eliminar metadatos y el pedido
DELETE FROM wp_postmeta WHERE post_id IN ( SELECT ID FROM wp_posts WHERE post_type = 'shop_order' AND post_date < '2022-01-01' ); DELETE FROM wp_posts WHERE post_type = 'shop_order' AND post_date < '2022-01-01';
5. Hacer backup antes
Antes de cualquier limpieza masiva, realiza una copia de seguridad completa de la base de datos. Puedes usar:
mysqldump -u usuario -p base > backup.sql
- Exportación desde phpMyAdmin
6. Automatizar con cron
Usa un cron semanal para borrar pedidos antiguos automáticamente:
0 4 * * 0 /usr/bin/php /var/www/limpiar_pedidos_antiguos.php
💡 Dentro del script puedes definir fecha dinámica con strtotime("-18 months")
.
7. Consejos finales
- ✅ Filtra por estado para no eliminar pedidos activos
- 🧪 Haz pruebas primero en una copia de tu base
- 📊 Revisa cómo afecta al rendimiento en dashboards y backoffice
8. Conclusión
Eliminar pedidos antiguos en WooCommerce desde SQL permite aligerar tu base de datos, mejorar tiempos de respuesta y liberar espacio innecesario. Automatizar este proceso es especialmente útil en tiendas con alto volumen de ventas.
📩 ¿Quieres que te preparemos un sistema de limpieza programado o un dashboard para visualizarlo? Escríbenos.