Come è organizzato il database di WordPress e Woocommerce?
1. Introduzione: perché ti interessa davvero
Da sviluppatore, so bene quanto il database sia il cuore pulsante di un sito. E va ben oltre la semplice “tabella dei post”: WordPress e WooCommerce hanno un ecosistema strutturato, fatto di interazioni tra tabelle e meta-data. Oggi ti porto in un viaggio tra strutture e relazioni, in 5 tappe efficaci.
2. Cuore WordPress: le 12 tabelle (e non solo)
Un’installazione standard di WordPress prevede 12 tabelle base che gestiscono contenuti, utenti, tassonomie ecc. — e molte altre se usi plugin o multisite .
wp_posts
→ post, pagine, allegati, menù, revisione ecc.wp_postmeta
→ metadati chiave/valore associati ai post (es. campo personalizzato, dati plugin)wp_options
→ impostazioni del sito, configurazioni plugin, ecc.wp_users
/wp_usermeta
→ utenti e metadati utentiTassonomie:
wp_terms
,wp_term_taxonomy
,wp_term_relationships
gestiscono categorie e tagCommenti:
wp_comments
+wp_commentmeta
wp_links
(deprecated) ewp_termmeta
(in alcune versioni) .
🧠 In pratica:
Immagina wp_posts come un foglio Excel centrale con post standarizzati e custom, e wp_postmeta, wp_usermeta e wp_commentmeta come fogli aggiuntivi in stile Excel key/value per dati extra.
3. WooCommerce: un upgrade strutturale
WooCommerce usa le tabelle WordPress esistenti (post_type = 'product'
o shop_order
) e aggiunge tabelle proprie per gestire ordini, sessioni, tasse ecc.
woocommerce_sessions
woocommerce_api_keys
woocommerce_order_items
,woocommerce_order_itemmeta
woocommerce_tax_rates
,woocommerce_tax_rate_locations
woocommerce_shipping_zones
,woocommerce_shipping_zone_locations
,woocommerce_shipping_zone_methods
woocommerce_payment_tokens
,woocommerce_payment_tokenmeta
woocommerce_log
actionscheduler_*
per gestire azioni pianificate github.com+1woocommerce.com+1
📦 Prodotti e metadati
I prodotti WooCommerce sono tipicamente post con post_type = 'product'
, e i dettagli (prezzo, SKU, stock, ecc.) risiedono in wp_postmeta
, come _price
, _regular_price
, _sku
, total_sales
ecc.
4. Relazioni e casi d’uso pratici
Una volta che inizi a conoscere le tabelle e le relazioni nel database, apri un mondo. Non solo per fare debug o ottimizzare performance, ma anche per costruire funzioni custom che fanno davvero la differenza nel tuo sito.
Ecco 10+ relazioni che ti consiglio di esplorare, con casi d’uso reali che ho affrontato sul campo:
🔄 1. Prodotto ↔ Variazioni
Le variazioni sono post figli (product_variation
) del prodotto principale (product
). Prezzi, SKU e stock sono nei postmeta
.
→ Utile per creare filtri avanzati e visualizzazioni smart delle varianti.
🛍️ 2. Prodotto ↔ Attributi (tassonomie personalizzate)
Taglie, colori, brand? Tutto dentro wp_terms
, wp_term_taxonomy
e wp_term_relationships
.
→ Essenziale se vuoi gestire filtri front-end tipo Zalando o Amazon.
🛒 3. Ordine ↔ Prodotti acquistati
Ogni ordine (shop_order
) ha righe in woocommerce_order_items
che rappresentano i prodotti acquistati.
→ Puoi generare report vendite per SKU o per categoria con query dirette.
👤 4. Ordine ↔ Cliente
Ordini assegnati all’utente registrato (post_author
) oppure associati via meta (_billing_email
, _customer_user
).
→ Fondamentale per storicizzare gli acquisti e implementare un’area clienti personalizzata.
🧺 5. Sessione ↔ Carrello
WooCommerce salva lo stato del carrello in woocommerce_sessions
anche se l’utente non è loggato.
→ Ti permette di tracciare carrelli abbandonati e creare strategie di recupero.
🧾 6. Coupon ↔ Ordini
I coupon sono shop_coupon
e l’uso è tracciato nei postmeta
degli ordini.
→ Puoi analizzare i coupon più performanti o escludere promo duplicate.
⏰ 7. Action Scheduler ↔ Eventi pianificati
Tutte le azioni ritardate (email, rinnovi, sync) sono tracciate in wp_actionscheduler_*
.
→ Indispensabile per debug di abbonamenti o per gestire operazioni massive in background.
🧠 8. Utente ↔ Preferenze / Dati personalizzati
I dati degli utenti sono in wp_users
e wp_usermeta
.
→ Puoi personalizzare l’esperienza in base a comportamenti o ruoli.
⚙️ 9. WooCommerce ↔ Impostazioni globali
Tutte le opzioni (moneta, tasse, email) stanno in wp_options
.
→ Utile per creare ambienti clonati in staging o backup intelligenti.
📦 10. Stock ↔ Prodotto / Variazione
Il campo _stock
è nei metadati del prodotto o della singola variazione.
→ Serve per creare alert magazzino, sistemi di notifica o logiche “fuori stock” custom.
🎁 Bonus: Ordini ↔ Metodo di pagamento / spedizione
I metodi selezionati sono salvati nei meta _payment_method
, _shipping_method
.
→ Puoi usarli per creare report di spedizione, logistica o analisi costi.
5. Perché ti serve saperlo?
Ottimizzazione & performance
Sapere dove stanno i dati ti aiuta a fare query rapide e mirate.Debug & risoluzione errori
Capisci facilmente da dove arrivano i problemi (es. ordine duplicato).Migrazioni e backup scalabili
Ti consente di sincronizzare solo il necessario (es. tabelle prodotti/ordini).Sicurezza e pulizia
Individui contenuti orfani o reset di configurazioni (tipowp_options
).
