Saltar al contenido
WooRescueHQ

WooCommerce / HPOS

HPOS en WooCommerce: problemas, migración y código a medida

High-Performance Order Storage (HPOS) traslada los pedidos de WooCommerce de las tablas de entradas de WordPress a tablas propias. Las tiendas ganan consultas de pedidos más rápidas; el código que lee los pedidos a la antigua deja de verlos.

Respuesta corta

HPOS guarda los pedidos en tablas propias como wp_wc_orders en lugar de wp_posts y wp_postmeta. El código que usa get_post_meta(), WP_Query o SQL directo sobre pedidos deja de funcionar cuando HPOS es el almacenamiento principal. Se arregla usando la API de pedidos de WooCommerce (wc_get_orders(), wc_get_order(), $order->get_meta()) y migrando con el modo de compatibilidad activado para que ambos almacenamientos sigan sincronizados.

Problemas concretos

Problemas de HPOS habituales

Código a medida que deja de ver los pedidos

get_post_meta(), WP_Query con shop_order y SQL sobre wp_posts.

/es/woocommerce/hpos/codigo-personalizado/

Extensiones incompatibles

WooCommerce no deja activar HPOS mientras haya plugins incompatibles activos.

Migración y sincronización

Pedidos pendientes de sincronizar, migraciones lentas en tiendas grandes, errores durante la sincronización.

Diferencias de datos entre almacenamientos

Pedidos o meta que no coinciden entre las tablas de entradas y las tablas de pedidos.

Tablas de pedidos antiguas

Informes, exportaciones e integraciones que siguen leyendo las tablas antiguas.

Consultas directas a la base de datos

SQL en código a medida, herramientas de informes e integraciones externas.

Qué cambia con HPOS

Antes los pedidos eran entradas de WordPress de tipo shop_order, con sus datos repartidos entre wp_posts y wp_postmeta. Con HPOS, los pedidos viven en tablas propias (wp_wc_orders, wp_wc_orders_meta, wp_wc_order_addresses y wp_wc_order_operational_data) diseñadas para consultas de pedidos.

El código que usa la API de pedidos de WooCommerce sigue funcionando, porque la API lee el almacenamiento que sea el principal. El código que se la salta, no.

Falla con HPOS Funciona con ambos almacenamientos
get_post_meta( $order_id, '_clave', true ) wc_get_order( $order_id )->get_meta( '_clave' )
update_post_meta( $order_id, … ) $order->update_meta_data( … ); $order->save();
new WP_Query( [ 'post_type' => 'shop_order' ] ) wc_get_orders( [ … ] )
SQL sobre wp_posts / wp_postmeta para pedidos Consultas de pedidos mediante la API

El modo de compatibilidad es la red de seguridad

Con el modo de compatibilidad activado, WooCommerce mantiene sincronizadas las tablas de entradas y las tablas de pedidos. Eso permite una migración gradual: activar la sincronización, dejar que termine, verificar, cambiar el almacenamiento principal a HPOS y mantener la sincronización hasta estar seguro, para que siga siendo posible volver atrás.

Preguntas frecuentes

¿Qué es HPOS en WooCommerce?

High-Performance Order Storage: un sistema que guarda los pedidos en tablas propias de la base de datos en lugar de en las tablas genéricas de entradas y meta de WordPress. Es la opción por defecto en las tiendas nuevas desde WooCommerce 8.2.

¿Cómo sé si mi tienda usa HPOS?

Ve a WooCommerce → Ajustes → Avanzado → Características. Ahí se indica qué almacenamiento de pedidos es el principal y si el modo de compatibilidad (sincronización) está activado.

¿Por qué get_post_meta() no devuelve nada en los pedidos?

Porque con HPOS como almacenamiento principal, los datos del pedido están en las tablas de pedidos, no en wp_postmeta. Léelos a través del objeto del pedido: wc_get_order( $id )->get_meta( 'clave' ).

$ describe el problema

¿Tienes un problema con WooCommerce?Solicita un diagnóstico.

Cuéntanos qué falla, qué ha cambiado últimamente y cómo afecta al negocio. Revisamos cada solicitud y te recomendamos el siguiente paso.

Solicitar un diagnóstico Ver servicios y precios

Nunca envíes contraseñas, claves API ni datos de tarjetas a través del formulario.

Diagnóstico desde299 €

Solicitar un diagnóstico