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 utenti

  • Tassonomie: wp_terms, wp_term_taxonomy, wp_term_relationships gestiscono categorie e tag

  • Commenti: wp_comments + wp_commentmeta

  • wp_links (deprecated) e wp_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 (tipo wp_options).

Gabriele Azzalin

Ciao sono Gabriele!
Sviluppo e programmo quello che vuoi.

Mettimi alla prova!

CONDIVIDI