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.
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.
N'envoyez jamais de mots de passe, de clés API ni de données de carte via le formulaire.