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 implicadas en pedidos

Un pedido en WooCommerce se guarda como un post_type = 'shop_order'. Está relacionado con:

TablaDescripción
wp_postsContiene los pedidos (como posts)
wp_postmetaDatos del pedido (totales, dirección, métodos)
wp_woocommerce_order_itemsLíneas del pedido (productos comprados)
wp_woocommerce_order_itemmetaMetadatos 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.

Ir al contenido