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_relationshipsgestiscono categorie e tagCommenti:
wp_comments+wp_commentmetawp_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_sessionswoocommerce_api_keyswoocommerce_order_items,woocommerce_order_itemmetawoocommerce_tax_rates,woocommerce_tax_rate_locationswoocommerce_shipping_zones,woocommerce_shipping_zone_locations,woocommerce_shipping_zone_methodswoocommerce_payment_tokens,woocommerce_payment_tokenmetawoocommerce_logactionscheduler_*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).
