vendredi 25 septembre 2026

À propos

Contact

E-commerce

Migrer les commandes WooCommerce vers le HPOS : la marche à suivre pas à pas

Depuis la bascule par défaut du stockage haute performance des commandes, voici comment migrer une boutique existante vers le HPOS sans perdre une commande ni casser une extension.

Par Clément Hadrot • 7 décembre 2023 • 5 min de lecture • Aucun commentaire
Migrer les commandes WooCommerce vers le HPOS : la marche à suivre pas à pas

Le stockage haute performance des commandes, plus connu sous son acronyme HPOS (High-Performance Order Storage), stocke les commandes WooCommerce dans des tables SQL dédiées plutôt que dans la table wp_posts partagée avec tous les autres contenus WordPress. Annoncé dès 2022, il est devenu activable par défaut pour les nouvelles installations avec WooCommerce 8.2 en novembre 2023. Pour une boutique existante, la question n’est plus « faut-il basculer » mais « quand et comment le faire sans risque ».

Ce guide s’adresse aux boutiques qui tournaient encore sur le stockage classique en table wp_posts et souhaitent migrer leurs commandes historiques vers le HPOS, avec toute la prudence que mérite une migration de données comptables.

Pourquoi le HPOS change vraiment la donne

La table wp_posts mélange articles, pages, produits, révisions et commandes dans une structure générique pensée pour du contenu éditorial, pas pour des transactions commerciales à fort volume. Sur une boutique qui traite plusieurs milliers de commandes par mois, les requêtes de recherche, de filtrage par statut ou d’export deviennent lentes à mesure que la table grossit. Le HPOS introduit des tables dédiées (wc_orders, wc_order_items, wc_order_operational_data, entre autres), structurées spécifiquement pour ce type de requêtes, avec des gains de performance mesurés significatifs sur les boutiques à fort volume de commandes.

Activer le mode de compatibilité synchronisée

Avant toute migration définitive, WooCommerce > Réglages > Avancé > Fonctionnalités propose un mode de synchronisation qui maintient les données à jour simultanément dans l’ancien et le nouveau système de stockage. C’est l’étape indispensable pour tester en conditions réelles sans engagement irréversible :

wp option get woocommerce_custom_orders_table_enabled
wp option get woocommerce_custom_orders_table_data_sync_enabled

Avec la synchronisation activée, chaque nouvelle commande et chaque modification de commande existante est répercutée dans les deux systèmes de stockage. Cela permet de basculer l’affichage administrateur entre l’un et l’autre, de comparer les résultats, et de revenir en arrière sans perte si un problème est détecté.

L'essentiel à retenir : Le mode de compatibilité synchronisée permet de tester le HPOS sans engagement définitif ; La migration se fait par lots via une tâche planifiée, jamais en un seul bloc ; Toute extension non compatible doit être vérifiée avant la bascule définitive

Vérifier la compatibilité des extensions actives

Avant d’aller plus loin, WooCommerce > État > Fonctionnalités liste les extensions installées avec leur statut de compatibilité HPOS déclaré. Une extension incompatible qui interroge directement wp_posts pour retrouver des commandes (plutôt que d’utiliser les fonctions d’abstraction comme wc_get_orders()) continuera de fonctionner en mode synchronisé, mais cessera de voir les nouvelles commandes une fois la synchronisation désactivée et l’ancien stockage abandonné.

// Mauvaise pratique à rechercher dans les extensions tierces avant migration :
$commandes = get_posts( [ 'post_type' => 'shop_order' ] );

// Pratique compatible HPOS, à privilégier :
$commandes = wc_get_orders( [ 'limit' => -1 ] );

Pour toute extension personnalisée développée en interne, c’est le moment de vérifier chaque appel à get_post, get_post_meta ou WP_Query ciblant le type de contenu shop_order, et de les remplacer par les fonctions d’abstraction WooCommerce correspondantes (wc_get_order, $order->get_meta(), wc_get_orders()).

Lancer la migration par lots

Une fois la compatibilité vérifiée et le mode synchronisé validé pendant plusieurs jours en conditions réelles, la bascule définitive s’effectue depuis WooCommerce > Réglages > Avancé > Fonctionnalités, en activant le stockage HPOS comme source de vérité. La migration des commandes historiques s’exécute alors par lots via une tâche planifiée (Action Scheduler), visible dans WooCommerce > État > Tâches planifiées, plutôt qu’en un seul traitement bloquant qui saturerait le serveur sur une boutique à fort historique :

wp action-scheduler run --hooks=wc_hpos_migration_batch_init

Sur une boutique avec plusieurs dizaines de milliers de commandes historiques, cette migration par lots peut s’étaler sur plusieurs heures. Il est recommandé de la lancer en période de trafic faible et de surveiller la charge serveur pendant son exécution.

Vérifier après bascule

  • Comparer un échantillon de commandes anciennes entre l’affichage administrateur et une extraction directe en base, pour s’assurer qu’aucune méta n’a été perdue ;
  • Tester les rapports WooCommerce > Analyses, qui s’appuient fortement sur la structure des commandes et peuvent révéler une incohérence de migration plus vite qu’une simple liste de commandes ;
  • Vérifier que les extensions de facturation, d’export comptable et de fidélité continuent de fonctionner normalement sur des commandes créées après la bascule.

Nous ne recommandons jamais de désactiver le mode de synchronisation avant d’avoir observé au moins une semaine de fonctionnement stable en HPOS avec l’ancien stockage encore disponible en secours. C’est le filet de sécurité qui coûte le moins cher à conserver un peu plus longtemps.

En résumé

La migration vers le HPOS n’est pas une simple case à cocher : elle demande une phase de synchronisation testée en conditions réelles, une vérification systématique de la compatibilité des extensions actives, et une migration par lots surveillée plutôt qu’un basculement brutal. Bien menée, elle libère des gains de performance significatifs sur les boutiques à fort volume ; mal préparée, elle peut faire disparaître des extensions de la boucle de traitement des commandes sans avertissement visible immédiat.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi