Genera un plugin de exportación de pedidos WooCommerce a CSV
Exportar pedidos de WooCommerce a CSV suena trivial hasta que tienes que hacerlo a diario para un partner que espera nombres de columna concretos, en un orden concreto, con líneas de pedido explotadas en filas separadas. Ahí la exportación nativa (Herramientas → Exportar) no llega, Advanced Order Export For WooCommerce (gratis) se queda cerca, y la versión pro pide ~60€/año para exportación programada y destinos remotos.
Un plugin generado es la herramienta correcta cuando el formato CSV lo fija un tercero (fulfilment, Hacienda, un SaaS contable) y quieres cero pasos manuales. Describes las columnas con sus nombres exactos, los filtros para qué pedidos incluir y dónde va el archivo — carpeta local, adjunto de email, SFTP, bucket S3.
¿Por qué generarlo en vez de instalar un plugin existente?
Advanced Order Export gratuito es excelente con UI interactiva. Se pone incómodo cuando la exportación debe estar totalmente automatizada a las 06:00 cada día sin intervención y el CSV debe llegar a un SFTP con un patrón de nombre específico. Eso cae en territorio pro, y aun así los destinos son fijos.
Los partners de fulfilment suelen mandarte una spec CSV sin margen: columnas en orden X, formato Y, cantidad sin decimales, líneas explotadas en N filas por pedido. Escribir un plugin que cumple la spec exacta es más limpio que post-procesar un CSV genérico con un segundo script.
Para tiendas con bucket S3 / DO Spaces, subir el CSV directo es una llamada API — sin dar acceso al servidor al partner. Un plugin generado lo hace de caja con tus credenciales en opciones.
Prompt de ejemplo
Este es el tipo de descripción que genera este plugin. Puedes partir de aquí y ajustar lo que necesites antes de generar.
Nombre del plugin: Acme Exportación WC Partner
Cron diario 06:00 hora del servidor: exporta pedidos "completed" del día anterior.
Columnas (orden exacto, separador coma, UTF-8 BOM):
order_id, order_date (YYYY-MM-DD), customer_email, customer_name, shipping_address1, shipping_postcode, shipping_country, sku, qty, unit_price_ex_vat, line_total, order_total, coupon_codes (separados por pipe).
Líneas: una fila por producto. Decimales con punto, 2 decimales.
Destino: subida SFTP a sftp://partner.example.com/uploads/ con nombre acme-<YYYYMMDD>.csv.
Credenciales SFTP en opciones (host, puerto, user, password, ruta remota).
Al éxito: guardar en opción timestamp + filas exportadas.
Al fallo: disparar acción "acme_export_failed" con el error y enviar email al admin.
Admin: página con últimos 30 días (OK/KO + filas), botón "Ejecutar ahora".
HPOS vía wc_get_orders() con date_query.Qué suele incluir el plugin generado
- Evento WP Cron programado en activación
- Consultas con wc_get_orders (HPOS-safe)
- Escritor CSV vía fputcsv con BOM UTF-8 para Excel
- Subida SFTP con phpseclib (empaquetado) y verificación de host key
- Página admin de log con botón "Run now" y capability manage_woocommerce
- Fallback a almacenamiento local si SFTP cae, con aviso al admin
- Hooks para extender columnas o filtrar filas
Distintos sets de columnas, distintos calendarios, distintos destinos (email, S3, Google Drive vía service account), exportaciones en paralelo — todo posible.
Preguntas frecuentes
¿Puedo exportar a Google Sheets?
Sí. Empaquetamos el client de Google, autenticamos con service account y añadimos filas al sheet que indiques. Pide en el prompt e incluye el spreadsheet ID.
¿Cómo maneja HPOS?
Usamos wc_get_orders() y $order->get_meta() por todos lados. Nada de get_post_meta sobre pedidos. Declara compatibilidad con custom_order_tables.
¿Y si mi tienda tiene 5.000 pedidos al día?
El cron exporta en bloques de 500 para evitar límites de memoria. Para volumen muy alto, pide Action Scheduler — reparte el trabajo y reintenta fallos automáticamente.
¿Ejecución manual desde admin?
Sí, botón "Run now". Corre síncrono para feedback inmediato (hasta 2.000 pedidos) o encola job background para más grandes.