Aller au contenu
WooRescueHQ

WooCommerce / HPOS

HPOS WooCommerce : problèmes, migration et code sur mesure

Le High-Performance Order Storage (HPOS) déplace les commandes WooCommerce des tables d’articles de WordPress vers des tables dédiées. Les boutiques gagnent des requêtes de commandes plus rapides ; le code qui lit les commandes à l’ancienne ne les voit plus.

Réponse courte

HPOS stocke les commandes dans des tables dédiées comme wp_wc_orders au lieu de wp_posts et wp_postmeta. Le code qui utilise get_post_meta(), WP_Query ou du SQL direct sur les commandes cesse de fonctionner dès que HPOS devient le stockage principal. La solution : passer par l’API des commandes de WooCommerce (wc_get_orders(), wc_get_order(), $order->get_meta()) et migrer avec le mode de compatibilité activé pour garder les deux stockages synchronisés.

Problèmes précis

Problèmes HPOS fréquents

Du code sur mesure qui ne voit plus les commandes

get_post_meta(), WP_Query avec shop_order et SQL sur wp_posts.

/fr/woocommerce/hpos/code-personnalise/

Extensions incompatibles

WooCommerce refuse d’activer HPOS tant que des extensions incompatibles sont actives.

Migration et synchronisation

Commandes en attente de synchronisation, migrations lentes sur les grandes boutiques, erreurs de synchronisation.

Données différentes entre stockages

Commandes ou métadonnées qui divergent entre les tables d’articles et les tables de commandes.

Anciennes tables de commandes

Rapports, exports et intégrations qui lisent encore les anciennes tables.

Requêtes directes en base

Du SQL dans du code sur mesure, des outils de reporting et des intégrations externes.

Ce que change HPOS

Les commandes étaient auparavant des articles WordPress de type shop_order, avec leurs données réparties entre wp_posts et wp_postmeta. Avec HPOS, elles vivent dans des tables dédiées (wp_wc_orders, wp_wc_orders_meta, wp_wc_order_addresses et wp_wc_order_operational_data) conçues pour les requêtes de commandes.

Le code qui passe par l’API des commandes de WooCommerce continue de fonctionner, car l’API lit le stockage qui fait foi. Le code qui la contourne, non.

Casse avec HPOS Fonctionne avec les deux stockages
get_post_meta( $order_id, '_cle', true ) wc_get_order( $order_id )->get_meta( '_cle' )
update_post_meta( $order_id, … ) $order->update_meta_data( … ); $order->save();
new WP_Query( [ 'post_type' => 'shop_order' ] ) wc_get_orders( [ … ] )
SQL sur wp_posts / wp_postmeta pour les commandes Requêtes de commandes via l’API

Le mode de compatibilité est le filet de sécurité

Avec le mode de compatibilité activé, WooCommerce garde synchronisées les tables d’articles et les tables de commandes. Cela permet une migration progressive : activer la synchronisation, la laisser se terminer, vérifier, basculer le stockage principal vers HPOS et garder la synchronisation jusqu’à être sûr, pour que le retour arrière reste possible.

Questions fréquentes

Qu’est-ce que HPOS dans WooCommerce ?

High-Performance Order Storage : un système qui stocke les commandes dans des tables dédiées au lieu des tables génériques d’articles et de métadonnées de WordPress. C’est le réglage par défaut pour les nouvelles boutiques depuis WooCommerce 8.2.

Comment savoir si ma boutique utilise HPOS ?

Allez dans WooCommerce → Réglages → Avancé → Fonctionnalités. Vous y voyez quel stockage des commandes fait foi et si le mode de compatibilité (synchronisation) est activé.

Pourquoi get_post_meta() ne renvoie-t-il rien pour les commandes ?

Parce qu’avec HPOS comme stockage principal, les données de commande se trouvent dans les tables de commandes, pas dans wp_postmeta. Lisez-les via l’objet commande : wc_get_order( $id )->get_meta( 'cle' ).

$ décrivez le problème

Un problème avec WooCommerce ?Demandez un diagnostic.

Dites-nous ce qui ne fonctionne pas, ce qui a changé récemment et l'impact sur votre activité. Nous examinons chaque demande et vous recommandons la marche à suivre.

Demander un diagnostic Voir les services et les tarifs

N'envoyez jamais de mots de passe, de clés API ni de données de carte via le formulaire.

Diagnostic à partir de299 €

Demander un diagnostic