Où sont stockés les produits WooCommerce dans la base de données WordPress ?

Où WooCommerce stocke-t-il les données de produits dans la base de données

En bref : WooCommerce stocke tous les produits sous forme de custom post types dans wp_posts, avec les attributs et métadonnées (prix, SKU, stock) dans wp_postmeta. Les catégories, étiquettes et attributs de produit se trouvent dans la famille de tables wp_terms. Les indicateurs de visibilité et de type de produit sont stockés sous forme de clés de post meta.

Parfois, vous ajoutez de nouveaux produits WooCommerce sur votre site de staging et vous souhaitez simplement transférer ces nouveaux produits vers le site en production sans affecter d’autres données comme les commandes et les transactions. Savoir quelles tables de base de données WooCommerce utilise rend ce transfert sûr et prévisible : vous ne copiez que les lignes contenant les données de produits et laissez les lignes de commandes intactes.

Cet article recense chaque table contenant des données de produits WooCommerce, explique les colonnes utiles au quotidien et fournit du SQL prêt à copier pour les requêtes les plus courantes. Si vous vous êtes déjà demandé pourquoi une modification de produit sur staging n’a pas été reportée après un push partiel, la réponse est presque toujours une table oubliée.

Pourquoi savoir où sont stockés les produits a de l’importance

Comprendre où sont stockés les produits WooCommerce est utile dans plusieurs situations concrètes :

  • Requêtes personnalisées : Récupérer des données de produits via des requêtes SQL pour des rapports ou des fonctionnalités sur mesure.
  • Optimisation de la base de données : Nettoyer les données inutiles pour améliorer les performances.
  • Résolution de problèmes : Régler les soucis liés à des détails de produits manquants ou incorrects.
  • Migration de données : Déplacer des produits entre différentes installations WordPress sans toucher aux données de commandes ou de clients.
  • Déboguer des attributs manquants : Lorsque la couleur ou la taille d’un produit n’apparaît pas sur le front-end, savoir quelle table de taxonomie inspecter fait gagner un temps de débogage considérable.

Principales tables stockant les données de produits WooCommerce

WooCommerce stocke les données de produits principalement dans deux tables :

  • wp_posts – Contient les entrées de produits avec un post type product ou product_variation.
Trouver les détails des produits WooCommerce via la table wp_posts
  • wp_postmeta – Stocke les métadonnées supplémentaires de chaque produit, liées via post_id (ID du produit).
Trouver le détail d'un produit via la table wp_postmeta

Vue d’ensemble des tables

Le tableau suivant associe chaque zone de stockage principale à ce qu’elle contient et aux colonnes le plus souvent nécessaires dans les requêtes ou les migrations :

Table Ce qu’elle stocke Colonnes clés
wp_posts Chaque produit et variation sous forme de ligne ID, post_title, post_type = 'product', post_status, post_modified
wp_postmeta Prix, SKU, stock, poids, dimensions — une ligne par clé et par produit post_id, meta_key, meta_value
wp_terms Noms de catégories et d’étiquettes, libellés d’attributs term_id, name, slug
wp_term_taxonomy Indique si un terme est une catégorie, une étiquette ou un attribut term_taxonomy_id, taxonomy, description
wp_term_relationships Relie chaque produit (object_id) à ses termes object_id, term_taxonomy_id
wp_termmeta Métadonnées supplémentaires attachées aux termes term_id, meta_key, meta_value
wp_woocommerce_attribute_taxonomies Définitions d’attributs globaux (par ex. Couleur, Taille) attribute_id, attribute_name, attribute_type

Exemple concret : récupérer un produit avec son prix et son niveau de stock

La requête ci-dessous joint wp_posts à wp_postmeta pour récupérer le prix et le statut de stock d’un seul produit. Remplacez 12345 par la valeur ID du produit issue de wp_posts :

SELECT
  p.ID,
  p.post_title,
  MAX(CASE WHEN pm.meta_key = '_price'        THEN pm.meta_value END) AS price,
  MAX(CASE WHEN pm.meta_key = '_stock_status' THEN pm.meta_value END) AS stock_status
FROM wp_posts p
JOIN wp_postmeta pm ON pm.post_id = p.ID
WHERE p.ID = 12345
  AND p.post_type = 'product'
GROUP BY p.ID, p.post_title;

Lors de nos tests avec WooCommerce 9.x, la clé meta _price est toujours renseignée, même lorsque le produit n’a pas de prix promotionnel explicite — elle reflète alors le prix normal. D’après l’expérience du support WP STAGING, la source de confusion la plus courante est de supposer que WooCommerce utilise ses propres tables entièrement séparées pour les produits. Ce n’est pas le cas : il étend wp_posts via le système de custom post types, si bien que chaque produit est une ligne de post avec une valeur post_type égale à product.

Référence rapide : trouvez ce dont vous avez besoin

Utilisez ce tableau pour aller directement à la bonne table et à la bonne colonne sans lire toute la documentation du schéma :

Je veux … Table Filtre
Lister tous les produits wp_posts post_type = 'product'
Trouver le prix d’un produit wp_postmeta meta_key = '_price'
Trouver le prix promotionnel d’un produit wp_postmeta meta_key = '_sale_price'
Vérifier le statut de stock wp_postmeta meta_key = '_stock_status'
Trouver le SKU d’un produit wp_postmeta meta_key = '_sku'
Lister les catégories d’un produit wp_term_relationshipswp_term_taxonomywp_terms taxonomy = 'product_cat'
Vérifier si un produit est mis en avant wp_term_relationships slug de terme featured dans product_visibility
Trouver toutes les variations d’un produit wp_posts post_type = 'product_variation' et post_parent = <ID du produit>

Tables stockant les catégories, étiquettes et attributs de produit

En plus des tables principales de produits, WooCommerce utilise plusieurs tables liées aux taxonomies pour gérer les types de produits, catégories, sous-catégories, étiquettes et attributs :

  • wp_terms – Stocke les catégories et étiquettes de produits.
  • wp_termmeta – Stocke les métadonnées des termes de produit.
  • wp_term_taxonomy – Définit le type de taxonomie (par ex. catégorie, étiquette, attribut).
  • wp_term_relationships – Relie les produits à leurs catégories et attributs.
  • wp_woocommerce_termmeta – Stocke les données de termes supplémentaires propres à WooCommerce.
  • wp_woocommerce_attribute_taxonomies – Gère spécifiquement les attributs de produit.

Lorsqu’un attribut de produit ne s’affiche pas correctement sur le front-end, vérifiez à la fois wp_term_relationships (pour confirmer que le produit est lié au bon terme) et wp_term_taxonomy (pour confirmer que la colonne taxonomy correspond au slug d’attribut attendu).

Types de produits et visibilité dans WooCommerce

WooCommerce gère différents types de produits via la taxonomie product_type, qui inclut les options par défaut suivantes :

  • simple – Un produit standard sans variations.
  • grouped – Un ensemble de produits associés.
  • variable – Un produit comportant plusieurs variations.
  • external – Un produit vendu sur un site web externe.

Depuis WooCommerce 3+, une nouvelle taxonomie appelée product_visibility gère :

  • Visibilité dans la recherche et le catalogue – Utilise des termes comme exclude-from-search et exclude-from-catalog.
  • Produits mis en avant – Identifiés par le terme featured.
  • Statut du stock – Utilise outofstock pour indiquer des produits indisponibles.
  • Notes – Des termes comme rated-1 à rated-5 catégorisent les avis sur les produits.

Chaque attribut de produit est stocké comme une taxonomie personnalisée, ce qui facilite la catégorisation et le filtrage dynamique des produits.

Opérations courantes

Supprimer des produits en masse et en toute sécurité par post type

Pour supprimer tous les produits d’une base de données de test ou de démonstration, ciblez wp_posts par post type et nettoyez les lignes postmeta associées dans la même opération :

-- Remove postmeta first (avoids orphaned rows)
DELETE pm
FROM wp_postmeta pm
JOIN wp_posts p ON p.ID = pm.post_id
WHERE p.post_type IN ('product', 'product_variation');

-- Then remove the product and variation rows
DELETE FROM wp_posts
WHERE post_type IN ('product', 'product_variation');

⚠️ Exécutez toujours ceci d’abord sur une base de données de staging. Cela supprime définitivement toutes les lignes de produits et leurs métadonnées. Cela ne touche pas les tables de commandes.

Migrer des produits WooCommerce de staging vers la production

Lorsque vous transférez uniquement des produits — pas les commandes — depuis un environnement de staging, l’ensemble minimal de tables à inclure est :

  • wp_posts — lignes où post_type IN ('product', 'product_variation')
  • wp_postmeta — lignes dont le post_id appartient à un produit ou une variation
  • wp_terms, wp_termmeta, wp_term_taxonomy, wp_term_relationships — lignes liées à product_cat, product_tag et aux taxonomies d’attributs personnalisées
  • wp_woocommerce_attribute_taxonomies — si vous avez des définitions d’attributs globaux personnalisées dans l’environnement source

Laissez de côté toutes les tables wp_woocommerce_order* et wp_wc_order* lors du push : les inclure écraserait les commandes clients en production avec les données de staging.

Réinitialiser les données de produits de test

Après avoir rempli une boutique de staging avec des produits de test, réinitialisez-la à un état propre en supprimant les lignes où post_type = 'product' à l’aide de la requête ci-dessus. Le push sélectif de WP STAGING vous permet aussi de définir quels post types inclure ou exclure, de sorte que vous pouvez transférer de vrais produits de staging vers la production sans écrire de SQL brut.

Bonnes pratiques pour copier les données de produits vers un site en production

Lors du transfert de nouveaux produits d’un site de staging vers un site en production, protégez les commandes et les données clients en suivant ces étapes :

  1. Sauvegardez la base de données de production. Exportez un instantané complet avant tout push afin de pouvoir restaurer immédiatement si quelque chose tourne mal.
  2. Ne copiez que les tables pertinentes. Concentrez-vous sur wp_posts, wp_postmeta et les tables liées aux taxonomies.
  3. Excluez les tables liées aux commandes. Évitez les tables préfixées par wp_woocommerce_, sauf si vous comptez expressément migrer des données de commandes.
  4. Utilisez un outil de migration. Des plugins comme WP STAGING gèrent automatiquement les pushes sélectifs de tables, y compris le rechercher-remplacer dans les données sérialisées pour les différences d’URL entre environnements.
  5. Vérifiez d’abord sur staging. Exécutez une requête en lecture seule sur la base de données de staging pour confirmer le nombre de lignes de produits attendu avant de lancer le push.

Conclusion

Les produits WooCommerce sont principalement stockés dans wp_posts et wp_postmeta, tandis que les catégories, attributs et paramètres de visibilité sont gérés dans des tables de taxonomies associées. Comprendre cette structure aide à migrer en toute sécurité les données de produits sans affecter les opérations de la boutique en production.

Références :

Articles connexes

Rene Hermenau

Auteur : Rene Hermenau

À propos de l'auteur : René Hermenau est le fondateur de WP STAGING. Il travaille sur les sauvegardes WordPress, les environnements de staging, les migrations, la gestion des bases de données et les workflows de déploiement sécurisés.