HPOS: el cambio más importante en WooCommerce en años
Desde WooCommerce 8.2, el High-Performance Order Storage (HPOS) dejó de ser experimental y se convirtió en el sistema de almacenamiento de pedidos por defecto. Este cambio supone mover los pedidos de la tabla wp_posts y wp_postmeta a tablas dedicadas optimizadas para operaciones de ecommerce.
Actualización — julio 2026
Han pasado más de dos años desde la publicación original de este artículo y HPOS ya no es una novedad: es la forma normal de guardar pedidos en WooCommerce. La versión estable en el momento de esta revisión es la 10.9.4 (7 de julio de 2026), que exige WordPress 6.9 como mínimo desde la rama 10.8. Dos matices importantes que conviene tener claros: HPOS viene activado por defecto solo en instalaciones nuevas —las tiendas que ya existían siguen en el sistema legacy hasta que alguien decide migrarlas— y, desde WooCommerce 10.7 (abril de 2026), la sincronización sync on read del modo de compatibilidad viene desactivada por defecto. El almacenamiento legacy sigue disponible y Automattic no ha anunciado una fecha de retirada, pero cada versión reduce el margen de seguridad de quedarse en él.
Por qué importa HPOS
La tabla wp_postmeta es el cuello de botella histórico de WooCommerce. Cada pedido genera decenas de filas en una tabla que comparte con posts, páginas, productos y todo el contenido de WordPress. Con miles de pedidos, las consultas se vuelven lentas y la base de datos crece desproporcionadamente. HPOS resuelve esto con tablas dedicadas con índices optimizados.
Mejoras concretas
En nuestras pruebas, la mejora de rendimiento con HPOS es significativa: consultas de listado de pedidos hasta 5x más rápidas, reducción del tamaño de la base de datos, y mejor rendimiento en operaciones de búsqueda y filtrado. Para tiendas con más de 10.000 pedidos, la diferencia es muy notable.
Conviene entender de dónde sale esa mejora, porque no es magia. En el modelo legacy, filtrar los pedidos de un cliente concreto obliga a cruzar wp_posts con varias filas de wp_postmeta mediante joins sobre una columna meta_value de tipo texto largo, que no se puede indexar bien. En HPOS ese dato es una columna real, con su índice, en una tabla que solo contiene pedidos. La diferencia no está en el lenguaje ni en el servidor: está en el diseño del esquema. Por eso el salto se nota sobre todo en el panel de administración (listado de pedidos, búsquedas, informes) y en las integraciones que consultan pedidos por API, más que en la velocidad de carga de la portada de la tienda.
También hay un efecto secundario que casi nadie menciona y que en auditorías agradecemos mucho: al separar los pedidos del contenido, las tareas de mantenimiento de WordPress —limpiar revisiones, purgar transients, optimizar tablas— dejan de tocar las mismas tablas donde viven los datos de facturación. Menos acoplamiento significa menos riesgo cada vez que se ejecuta una operación de limpieza.

Qué tablas crea HPOS exactamente
Saber qué hay debajo ayuda a depurar cuando algo va mal. HPOS no crea una tabla gigante, sino un pequeño conjunto normalizado:
wp_wc_orders— la cabecera del pedido: estado, moneda, totales, cliente, fechas.wp_wc_order_addresses— direcciones de facturación y de envío, una fila por tipo.wp_wc_order_operational_data— datos de operación: método de pago, claves de transacción, versión de creación, si se ha descargado o no.wp_wc_orders_meta— metadatos que no encajan en columnas fijas (los que añaden plugins y desarrollos propios).
Las líneas de pedido (wp_woocommerce_order_items y wp_woocommerce_order_itemmeta) no cambian: siguen donde estaban. Esto sorprende a mucha gente que espera que HPOS reescriba todo el modelo de datos. No lo hace: ataca el cuello de botella real, que era la cabecera del pedido y sus metadatos.
Cómo saber si tu tienda ya usa HPOS
Hay tres formas rápidas de comprobarlo, y merece la pena hacerlo antes de tocar nada:
- Desde el panel: WooCommerce → Ajustes → Avanzado → Funciones. Ahí verás si el almacenamiento autoritativo son las tablas de HPOS o las de WordPress, y si el modo de compatibilidad está activo.
- Por WP-CLI:
wp option get woocommerce_custom_orders_table_enableddevuelveyessi HPOS es el sistema autoritativo, ywp option get woocommerce_custom_orders_table_data_sync_enabledte dice si la sincronización está encendida. - Mirando la base de datos: si
wp_wc_ordersexiste pero está vacía mientras siguen entrando pedidos, tienes las tablas creadas pero HPOS no es autoritativo.
Ese último caso es más habitual de lo que parece en tiendas que activaron y desactivaron la opción en algún momento, y es justo el escenario en el que conviene ir con calma.
Verificar compatibilidad antes de migrar
El mayor riesgo de la migración es la incompatibilidad de plugins. Cualquier plugin que acceda a pedidos usando directamente get_post_meta() o consultas SQL a wp_postmeta en lugar de las APIs de WooCommerce ($order->get_meta()) dejará de funcionar correctamente. Antes de migrar, verifica que todos tus plugins críticos declaran compatibilidad con HPOS.
Cómo hacer compatible tu propio código
En una tienda con desarrollos a medida —y casi todas las tiendas serias los tienen— el problema no son solo los plugins de terceros, sino el código propio acumulado durante años. La regla es sencilla: deja de tratar el pedido como un post. En la práctica eso significa cuatro sustituciones:
get_post_meta($order_id, $clave, true)pasa a ser$order->get_meta($clave).update_post_meta()pasa a ser$order->update_meta_data($clave, $valor)seguido de$order->save().get_post_status()ywp_update_post()pasan a ser$order->get_status()y$order->set_status().- Las consultas
WP_Queryoget_posts()conpost_type => shop_orderpasan a serwc_get_orders(), que funciona igual en ambos sistemas.
El patrón general es usar siempre la capa CRUD de WooCommerce en lugar de la API de posts de WordPress. Como beneficio colateral, ese código será agnóstico al almacenamiento: funciona con legacy y con HPOS sin cambios. Si quieres localizar los puntos calientes, una búsqueda por postmeta, post_type y shop_order en el tema hijo y en los plugins propios suele destapar el 90 % de los casos en pocos minutos.
Declarar compatibilidad en un plugin
Si desarrollas o mantienes plugins, WooCommerce espera una declaración explícita mediante FeaturesUtil::declare_compatibility() en el hook before_woocommerce_init. Sin esa declaración, el panel avisa al administrador de que hay extensiones potencialmente incompatibles y bloquea la activación de HPOS hasta que se acepta el riesgo. Es un mecanismo de aviso, no una verificación real: declarar compatibilidad no significa que el código lo sea. Nos hemos encontrado plugins que la declaran y siguen escribiendo con update_post_meta(), así que el aviso del panel es un punto de partida, no una garantía.
Proceso de migración paso a paso
WooCommerce ofrece un modo de sincronización bidireccional que mantiene ambos sistemas actualizados simultáneamente. La estrategia recomendada es: activar la sincronización, ejecutar la migración de datos históricos, verificar que todo funciona durante un período de prueba, y finalmente desactivar la sincronización dejando solo HPOS activo.

Los comandos WP-CLI que vas a usar
En tiendas con volumen, hacer la migración desde el panel es una mala idea: depende de Action Scheduler, que a su vez depende de que el cron de WordPress se dispare, y en una tienda con carga eso puede alargarse días. Por WP-CLI el control es total:
wp wc hpos sync— copia los pedidos pendientes al nuevo almacenamiento. Se puede lanzar por lotes con--batch-sizey volver a ejecutarlo tantas veces como haga falta: es idempotente.wp wc hpos status— muestra cuántos pedidos quedan por sincronizar, lo que permite estimar el tiempo restante.wp wc hpos verify_cot_data --verbose— compara fila a fila los datos de ambos almacenamientos y reporta las diferencias. Este es el comando que decide si la migración es fiable o no.wp wc hpos diff <id>— compara un pedido concreto entre los dos sistemas, muy útil cuando la verificación global señala discrepancias y hay que entender por qué.
Un detalle histórico que genera confusión: el namespace original era wp wc cot (de custom order tables) y buena parte de la documentación y los tutoriales antiguos lo siguen usando. Hoy el correcto es wp wc hpos, aunque el subcomando de verificación conserva el nombre heredado verify_cot_data.
Qué cambió en 2026: sync on read desactivado por defecto
Este es el cambio que más rupturas silenciosas está provocando en 2026, y merece un párrafo propio. El modo de compatibilidad tenía dos direcciones. La de siempre, sync on write, copia a wp_posts cada pedido que se crea o modifica a través de WooCommerce. La otra, sync on read, hacía lo contrario: si algún código escribía directamente en wp_postmeta saltándose las APIs, al leer el pedido se detectaba la divergencia y se arrastraba hacia HPOS.
Desde WooCommerce 10.7 esa segunda dirección viene desactivada por defecto. La consecuencia práctica: si tienes un plugin o un snippet que escribe con update_post_meta(), hasta ahora funcionaba de milagro y ahora deja de reflejarse en el pedido, sin ningún error visible. Los datos simplemente no aparecen. Las tiendas afectadas ven un aviso descartable en el panel tras actualizar, y se puede volver a activar la sincronización de lectura con el filtro woocommerce_hpos_enable_sync_on_read, pero eso es un parche temporal: lo correcto es arreglar el código que escribe por debajo.
Tiendas grandes: cómo no tumbar la base de datos
Con cientos de miles de pedidos, la migración deja de ser un botón y se convierte en un proyecto. Lo que aplicamos en estos casos:
- Medir antes. Contar los pedidos, medir el tamaño real de
wp_postmetay cronometrar un lote pequeño para extrapolar la duración total. - Lotes moderados y ventana de baja carga. Es mejor un
--batch-sizeconservador durante varias noches que un lote enorme que sature la CPU de la base de datos en plena campaña. - Vigilar la replicación. En arquitecturas con réplica de lectura, una escritura masiva puede generar replication lag y hacer que el panel muestre datos incoherentes durante la migración.
- Espacio en disco. Durante el modo de compatibilidad los pedidos están duplicados. Hay que contar con ese pico antes de empezar, no descubrirlo cuando la partición se llena.
- No desactivar la sincronización el mismo día. Conviene dejar una o dos semanas de convivencia con verificaciones periódicas antes de dar el paso final.
Plugins que debes verificar
Los plugins más problemáticos suelen ser los de transportistas, facturación y ERP. Comprueba especialmente: plugins de envío que guardan datos de tracking, plugins de facturación electrónica, integraciones con marketplaces, y cualquier plugin que añada campos personalizados a los pedidos.
Facturación electrónica, Verifactu y campos personalizados del pedido
En España este punto se ha vuelto crítico por un motivo normativo. La factura electrónica obligatoria entre empresas y los sistemas de facturación verificable (Verifactu) han hecho que muchos plugins de facturación empiecen a guardar en el pedido datos que antes no existían: identificadores de registro, huellas de encadenamiento, códigos QR, estados de envío a la Agencia Tributaria. Todo eso vive en los metadatos del pedido, es decir, exactamente en la capa que HPOS cambia de sitio.
La recomendación es concreta: antes de migrar, haz una prueba de ciclo completo en staging con un pedido real —cobro, generación de factura, envío al sistema de facturación, devolución parcial— y comprueba que todos esos campos siguen ahí después de la migración. Un pedido que pierde su identificador fiscal no es un fallo estético, y detectarlo tres meses después es mucho más caro que dedicar una tarde a probarlo. Si estás revisando el conjunto de extensiones de la tienda, nuestra selección de plugins de WooCommerce imprescindibles para un ecommerce profesional incluye ya la compatibilidad con HPOS como criterio de elección.
🚀 ¿Tu ecommerce necesita un impulso técnico?
En Keliam desarrollamos y optimizamos tiendas online. Migración entre plataformas, desarrollo a medida, integraciones y rendimiento.
- Desarrollo Ecommerce — soluciones e-commerce a medida
- Auditoría Técnica Web — análisis de rendimiento y seguridad
- Mantenimiento WooCommerce — soporte continuo para tu plataforma
Errores comunes que vemos en auditorías
Después de revisar bastantes tiendas migradas (o a medio migrar), los fallos se repiten con una regularidad casi aburrida:
- Migrar sin auditar el código propio. Se revisan los plugins de terceros y se olvida el
functions.phpdel tema hijo, donde suele acumularse la lógica más antigua y la más crítica. - Quedarse indefinidamente en modo de compatibilidad. Es un estado de transición, no un destino. Mantenerlo activo para siempre significa pagar el coste de escribir dos veces cada pedido y renunciar a buena parte de la mejora de rendimiento.
- No ejecutar la verificación. Saltarse
verify_cot_dataes migrar a ciegas. Es el único paso que confirma que los datos han llegado íntegros. - Confiar en la etiqueta de compatibilidad. Un plugin puede declararse compatible y seguir escribiendo con las funciones de posts. La prueba real es un ciclo de pedido completo en staging.
- Migrar en plena campaña. Hacerlo en la semana del Black Friday o en plena campaña de rebajas es garantizarse que cualquier incidencia coincida con el peor momento posible.
- No documentar el estado final. Si nadie apunta qué se migró, cuándo y con qué versión, el siguiente que toque la tienda repetirá el diagnóstico desde cero.
Qué rendimiento esperar y cómo medirlo
Hay que ajustar expectativas: HPOS mejora sobre todo el trabajo con pedidos, no la experiencia de navegación del cliente. Si el problema de tu tienda es que la ficha de producto tarda cuatro segundos en pintarse, HPOS no lo va a arreglar; ahí el trabajo está en la capa de frontend, caché y consultas de catálogo, como explicamos en la guía de Core Web Vitals y rendimiento web.
Dónde sí se nota, y cómo medirlo antes y después:
- Listado de pedidos en el panel. Cronometra la carga de WooCommerce → Pedidos con filtros aplicados (por estado, por cliente, por rango de fechas). Es la métrica más honesta.
- Peso de la base de datos. Compara el tamaño de
wp_postmetaantes y después de retirar la sincronización. - Tiempo de respuesta de la API. Si tienes un ERP o un marketplace consultando pedidos, mide la latencia media de esos endpoints; suelen ser los primeros en agradecer el cambio.
- Consultas lentas. Activa el registro de slow queries durante unos días antes de migrar; volver a mirarlo después es la mejor forma de demostrar el resultado.
Las versiones recientes han seguido apretando por ese camino: WooCommerce 10.8 (mayo de 2026) redujo consultas N+1 en la serialización de pedidos por API y añadió precarga de caché en las consultas HPOS, y la rama 10.9 continuó con mejoras de rendimiento y de las pantallas de administración. Es decir, el trabajo de optimización se está haciendo sobre HPOS: quedarse en legacy es quedarse fuera de esas mejoras. Si tu tienda arrastra problemas de rendimiento más profundos, el enfoque metodológico es el mismo que aplicamos en catálogos grandes de Magento 2: medir, priorizar por impacto y no tocar tres capas a la vez.
Seguridad, backups y plan de vuelta atrás
Una migración de datos es una operación de riesgo controlado, y el control lo dan dos cosas: la copia de seguridad y el plan de reversión.
La copia debe ser completa y restaurable, no solo un volcado guardado en el mismo servidor. Y hay que haberla probado: un backup que nadie ha restaurado nunca es una hipótesis, no una garantía. Sobre la reversión, la buena noticia es que el modo de compatibilidad actúa como red: mientras la sincronización está activa y wp_posts se mantiene al día, volver al almacenamiento legacy es cambiar una opción. La mala noticia es que esa red desaparece en el momento en que desactivas la sincronización, así que ese es el punto de no retorno de la operación y debe planificarse como tal.
Hay además un ángulo de seguridad que se pasa por alto. Al mover los pedidos a tablas propias, los volcados que se comparten con terceros —agencias, desarrolladores externos, entornos de pruebas— dejan de arrastrar los datos personales de los clientes solo por copiar el contenido del sitio. Eso facilita mucho anonimizar o excluir información sensible al preparar un entorno de staging, algo que el RGPD agradece y que forma parte de cualquier sistema de gestión de seguridad de la información tipo ISO 27001. En la misma línea, si tu tienda expone pedidos hacia fuera vía API, revisa el control de acceso de esos endpoints siguiendo las buenas prácticas de seguridad en APIs REST, y no olvides el endurecimiento básico de WordPress: HPOS protege el rendimiento, no la puerta de entrada.
Recomendación para nuevas instalaciones
Si estás montando una tienda WooCommerce nueva, activa HPOS desde el principio. Es el estándar actual, el rendimiento es superior, y todos los plugins modernos ya lo soportan. Solo tiene sentido mantener el sistema legacy si dependes de plugins antiguos sin mantenimiento.
Y si estás decidiendo plataforma antes que arquitectura, la pregunta previa es otra: repasa en qué escenarios WooCommerce sigue siendo la mejor opción en 2026 y en cuáles conviene mirar hacia otro lado. Migrar de sistema de almacenamiento es sencillo comparado con migrar de plataforma, así que el orden de las decisiones importa.
Preguntas frecuentes sobre HPOS
¿HPOS es obligatorio en 2026?
No. El almacenamiento legacy sigue funcionando y no hay una fecha de retirada anunciada. Lo que sí ocurre es que HPOS viene activado por defecto en instalaciones nuevas, que las mejoras de rendimiento de las últimas versiones se están haciendo sobre HPOS, y que cada vez menos extensiones prueban su código contra el modelo antiguo. La pregunta útil no es si es obligatorio, sino cuánto tiempo más quieres ser la excepción.
¿Se pueden perder pedidos en la migración?
Con el procedimiento correcto, no. La migración es una copia: los pedidos originales permanecen en wp_posts hasta que se desactiva la sincronización, y el comando de verificación compara ambos almacenamientos antes de dar el paso final. El riesgo real no es perder pedidos, sino que un plugin incompatible deje de escribir o de leer algún campo concreto y nadie se entere hasta semanas después.
¿Cuánto tarda la migración?
Depende del volumen y del hardware, no de la versión de WooCommerce. Una tienda con unos pocos miles de pedidos se migra en minutos. Con cientos de miles, hablamos de horas repartidas en varias ventanas nocturnas. La forma seria de estimarlo es cronometrar un lote pequeño y extrapolar, en lugar de fiarse de cifras genéricas.
¿Puedo volver atrás si algo va mal?
Sí, mientras el modo de compatibilidad esté activo: basta con devolver la autoridad al almacenamiento de WordPress. En cuanto desactivas la sincronización, la vuelta atrás deja de ser un cambio de opción y pasa a requerir una restauración desde copia de seguridad. Por eso ese paso se planifica aparte y no se hace el mismo día.
¿Qué pasa con los plugins que ya no reciben actualizaciones?
Son el bloqueo más frecuente. Las opciones, por orden de preferencia: buscar un sustituto mantenido, adaptar el plugin si su licencia lo permite, aislar su funcionalidad en un desarrollo propio compatible con la capa CRUD, o —última opción— posponer la migración y asumir que la tienda se queda anclada. Lo que no funciona es dejarlo activo y esperar que el modo de compatibilidad lo salve, sobre todo desde que sync on read está desactivado por defecto.
¿HPOS mejora la velocidad que ve el cliente en la tienda?
Poco y de forma indirecta. Mejora el trabajo con pedidos: panel, informes, API, procesos de checkout que consultan pedidos anteriores. La velocidad de la portada, de las categorías y de la ficha de producto depende de otras cosas —caché, imágenes, tema, consultas de catálogo—. Aliviar la base de datos ayuda al conjunto, pero no esperes un salto en Core Web Vitals solo por migrar.
Conclusión
HPOS pasó de ser una novedad experimental a ser, simplemente, cómo WooCommerce guarda los pedidos. En 2026 la conversación ya no es si migrar, sino cómo hacerlo sin sobresaltos: auditar el código propio y el de terceros, copiar en modo de compatibilidad, verificar con datos en la mano y cerrar la operación desactivando la sincronización cuando la tienda lleve semanas comportándose bien.
Lo que más nos encontramos no son migraciones fallidas, sino migraciones a medias: tiendas que llevan dos años en modo de compatibilidad, pagando el coste de escribir dos veces cada pedido sin cobrar el beneficio de las tablas dedicadas. Si ese es tu caso, el trabajo pendiente probablemente no sea grande: identificar los tres o cuatro puntos donde el código sigue escribiendo por debajo, arreglarlos y cerrar el ciclo. Y si prefieres que lo revise alguien de fuera antes de tocar la producción, una auditoría técnica o un plan de mantenimiento de ecommerce es exactamente el contexto para hacerlo con red.



