
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) danswp_postmeta. Les catégories, étiquettes et attributs de produit se trouvent dans la famille de tableswp_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 typeproductouproduct_variation.

wp_postmeta– Stocke les métadonnées supplémentaires de chaque produit, liées viapost_id(ID du produit).

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_relationships → wp_term_taxonomy → wp_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-searchetexclude-from-catalog. - Produits mis en avant – Identifiés par le terme
featured. - Statut du stock – Utilise
outofstockpour indiquer des produits indisponibles. - Notes – Des termes comme
rated-1àrated-5caté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 lepost_idappartient à un produit ou une variationwp_terms,wp_termmeta,wp_term_taxonomy,wp_term_relationships— lignes liées àproduct_cat,product_taget aux taxonomies d’attributs personnaliséeswp_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 :
- 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.
- Ne copiez que les tables pertinentes. Concentrez-vous sur
wp_posts,wp_postmetaet les tables liées aux taxonomies. - 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. - 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.
- 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 :
- Tables normales : Description de la base de données WordPress
- Tables spécifiques : Description de la base de données WooCommerce