Dove vengono memorizzati i prodotti WooCommerce nel database di WordPress?

Dove WooCommerce memorizza i dati dei prodotti nel database

In breve: WooCommerce memorizza tutti i prodotti come custom post type in wp_posts, con attributi e metadati (prezzo, SKU, scorte) in wp_postmeta. Categorie, tag e attributi di prodotto si trovano nella famiglia di tabelle wp_terms. I flag di visibilità e di tipo di prodotto vengono memorizzati come chiavi di post meta.

A volte aggiungi nuovi prodotti WooCommerce sul tuo sito di staging e vuoi semplicemente trasferire questi nuovi prodotti al sito live senza intaccare altri dati come ordini e transazioni. Sapere quali tabelle del database usa WooCommerce rende questo trasferimento sicuro e prevedibile: copi solo le righe che contengono i dati dei prodotti e lasci intatte le righe degli ordini.

Questo articolo mappa ogni tabella che contiene i dati dei prodotti WooCommerce, spiega le colonne che contano nell’uso quotidiano e include SQL pronto da copiare per le query più comuni. Se ti sei mai chiesto perché una modifica di prodotto su staging non è stata riportata dopo un push parziale, la risposta è quasi sempre una tabella dimenticata.

Perché è importante sapere dove vengono memorizzati i prodotti

Capire dove sono memorizzati i prodotti WooCommerce è utile in diverse situazioni pratiche:

  • Query personalizzate: Recuperare dati dei prodotti tramite query SQL per report o funzionalità personalizzate.
  • Ottimizzazione del database: Ripulire dati non necessari per migliorare le prestazioni.
  • Risoluzione dei problemi: Risolvere problemi con dettagli di prodotto mancanti o errati.
  • Migrazione dei dati: Spostare prodotti tra diverse installazioni di WordPress senza toccare i dati di ordini o clienti.
  • Debug degli attributi mancanti: Quando il colore o la taglia di un prodotto non compare nel front-end, sapere quale tabella di tassonomia ispezionare fa risparmiare molto tempo di debug.

Tabelle chiave che memorizzano i dati dei prodotti WooCommerce

WooCommerce memorizza i dati dei prodotti principalmente in due tabelle:

  • wp_posts – Contiene le voci dei prodotti con post type product o product_variation.
Trovare i dettagli dei prodotti WooCommerce utilizzando la tabella wp_posts
  • wp_postmeta – Memorizza i metadati aggiuntivi per ogni prodotto, collegati tramite post_id (ID prodotto).
Trovare il dettaglio del prodotto utilizzando la tabella wp_postmeta

Panoramica delle tabelle

La tabella seguente associa ogni area di archiviazione principale a ciò che contiene e alle colonne più spesso necessarie nelle query o nelle migrazioni:

Tabella Cosa memorizza Colonne chiave
wp_posts Ogni prodotto e variazione come una riga ID, post_title, post_type = 'product', post_status, post_modified
wp_postmeta Prezzo, SKU, scorte, peso, dimensioni — una riga per chiave e per prodotto post_id, meta_key, meta_value
wp_terms Nomi di categorie e tag, etichette degli attributi term_id, name, slug
wp_term_taxonomy Dichiara se un termine è una categoria, un tag o un attributo term_taxonomy_id, taxonomy, description
wp_term_relationships Collega ogni prodotto (object_id) ai suoi termini object_id, term_taxonomy_id
wp_termmeta Metadati aggiuntivi associati ai termini term_id, meta_key, meta_value
wp_woocommerce_attribute_taxonomies Definizioni di attributi globali (ad es. Colore, Taglia) attribute_id, attribute_name, attribute_type

Esempio pratico: recuperare un prodotto con prezzo e livello di scorte

La query seguente unisce wp_posts a wp_postmeta per ottenere il prezzo e lo stato delle scorte di un singolo prodotto. Sostituisci 12345 con il valore ID del prodotto preso da 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;

Nei nostri test con WooCommerce 9.x, la chiave meta _price è sempre valorizzata anche quando il prodotto non ha un prezzo scontato esplicito: rispecchia il prezzo normale. Dall’esperienza del supporto WP STAGING, la fonte di confusione più comune è l’idea che WooCommerce usi tabelle proprie e completamente separate per i prodotti. Non è così: estende wp_posts tramite il sistema dei custom post type, quindi ogni prodotto è una riga di post con un valore di post_type pari a product.

Riferimento rapido: trova ciò che ti serve

Usa questa tabella per andare direttamente alla tabella e alla colonna giuste senza leggere tutta la documentazione dello schema:

Voglio … Tabella Filtro
Elencare tutti i prodotti wp_posts post_type = 'product'
Trovare il prezzo di un prodotto wp_postmeta meta_key = '_price'
Trovare il prezzo scontato di un prodotto wp_postmeta meta_key = '_sale_price'
Verificare lo stato delle scorte wp_postmeta meta_key = '_stock_status'
Trovare lo SKU di un prodotto wp_postmeta meta_key = '_sku'
Elencare le categorie di un prodotto wp_term_relationshipswp_term_taxonomywp_terms taxonomy = 'product_cat'
Verificare se un prodotto è in evidenza wp_term_relationships slug del termine featured in product_visibility
Trovare tutte le variazioni di un prodotto wp_posts post_type = 'product_variation' e post_parent = <ID prodotto>

Tabelle che memorizzano categorie, tag e attributi dei prodotti

Oltre alle tabelle principali dei prodotti, WooCommerce utilizza diverse tabelle relative alle tassonomie per gestire tipi di prodotto, categorie, sottocategorie, tag e attributi:

  • wp_terms – Memorizza le categorie e i tag dei prodotti.
  • wp_termmeta – Memorizza i metadati per i termini dei prodotti.
  • wp_term_taxonomy – Definisce il tipo di tassonomia (ad es. categoria, tag, attributo).
  • wp_term_relationships – Collega i prodotti alle loro categorie e attributi.
  • wp_woocommerce_termmeta – Memorizza ulteriori dati dei termini specifici di WooCommerce.
  • wp_woocommerce_attribute_taxonomies – Gestisce specificamente gli attributi dei prodotti.

Quando un attributo di prodotto non compare correttamente nel front-end, controlla sia wp_term_relationships (per confermare che il prodotto sia collegato al termine corretto) sia wp_term_taxonomy (per confermare che la colonna taxonomy corrisponda allo slug dell’attributo previsto).

Tipi di prodotto e visibilità in WooCommerce

WooCommerce gestisce diversi tipi di prodotto utilizzando la tassonomia product_type, che include le seguenti opzioni predefinite:

  • simple – Un prodotto standard senza variazioni.
  • grouped – Un insieme di prodotti correlati.
  • variable – Un prodotto con più variazioni.
  • external – Un prodotto venduto su un sito web esterno.

Da WooCommerce 3+, una nuova tassonomia chiamata product_visibility gestisce:

  • Visibilità in ricerca e catalogo – Usa termini come exclude-from-search e exclude-from-catalog.
  • Prodotti in evidenza – Identificati con il termine featured.
  • Stato delle scorte – Usa outofstock per indicare i prodotti non disponibili.
  • Valutazioni – Termini come rated-1 fino a rated-5 categorizzano le recensioni dei prodotti.

Ogni attributo di prodotto viene memorizzato come una tassonomia personalizzata, rendendo facile categorizzare e filtrare i prodotti in modo dinamico.

Operazioni comuni

Eliminare i prodotti in modo sicuro e in blocco per post type

Per rimuovere tutti i prodotti da un database di test o popolato con dati di esempio, agisci su wp_posts per post type e ripulisci le righe postmeta correlate nella stessa operazione:

-- 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');

⚠️ Esegui sempre questa operazione prima su un database di staging. Elimina in modo permanente tutte le righe dei prodotti e i loro metadati. Non tocca le tabelle degli ordini.

Migrare i prodotti WooCommerce da staging a live

Quando trasferisci solo i prodotti — non gli ordini — da un ambiente di staging, l’insieme minimo di tabelle da includere è:

  • wp_posts — righe dove post_type IN ('product', 'product_variation')
  • wp_postmeta — righe il cui post_id appartiene a un prodotto o a una variazione
  • wp_terms, wp_termmeta, wp_term_taxonomy, wp_term_relationships — righe legate a product_cat, product_tag e alle tassonomie di attributi personalizzate
  • wp_woocommerce_attribute_taxonomies — se hai definizioni di attributi globali personalizzate nell’ambiente di origine

Lascia fuori dal push tutte le tabelle wp_woocommerce_order* e wp_wc_order*: includerle sovrascriverebbe gli ordini dei clienti in produzione con i dati di staging.

Reimpostare i dati dei prodotti di test

Dopo aver popolato uno store di staging con prodotti di test, riportalo a uno stato pulito eliminando le righe dove post_type = 'product' con la query precedente. Il push selettivo di WP STAGING ti consente anche di definire quali post type includere o escludere, così puoi trasferire prodotti reali da staging a live senza scrivere SQL grezzo.

Migliori pratiche per copiare i dati dei prodotti su un sito live

Quando sposti nuovi prodotti da un sito di staging a uno live, proteggi gli ordini e i dati dei clienti seguendo questi passaggi:

  1. Esegui un backup del database live. Esporta uno snapshot completo prima di qualsiasi push, così puoi ripristinare immediatamente se qualcosa va storto.
  2. Copia solo le tabelle rilevanti. Concentrati su wp_posts, wp_postmeta e sulle tabelle relative alle tassonomie.
  3. Escludi le tabelle relative agli ordini. Evita le tabelle con prefisso wp_woocommerce_ a meno che tu non intenda esplicitamente migrare i dati degli ordini.
  4. Usa uno strumento di migrazione. Plugin come WP STAGING gestiscono automaticamente i push selettivi delle tabelle, inclusa la ricerca-e-sostituzione nei dati serializzati per le differenze di URL tra gli ambienti.
  5. Verifica prima su staging. Esegui una query in sola lettura sul database di staging per confermare il numero di righe di prodotto previsto prima di avviare il push.

Conclusione

I prodotti WooCommerce sono memorizzati principalmente in wp_posts e wp_postmeta, mentre categorie, attributi e impostazioni di visibilità vengono gestiti in tabelle di tassonomie correlate. Comprendere questa struttura aiuta a migrare in sicurezza i dati dei prodotti senza compromettere le operazioni dello store live.

Riferimenti:

Articoli correlati

Rene Hermenau

Autore: Rene Hermenau

Informazioni sull'autore: René Hermenau è il fondatore di WP STAGING. Si occupa di backup WordPress, staging, migrazioni, gestione dei database e flussi di deployment sicuri.