WordPress è sicuramente una piattaforma molto potente che permette a chiunque di creare il proprio sito web e offre agli sviluppatori un gran numero di funzioni che richiamano automaticamente gli elementi di una pagina, ma c’è qualcosa che si cela dietro le quinte e che è meglio che tu conosca nel dettaglio.
Continua a leggere questo articolo se vuoi scoprire ancora meglio come funziona questa piattaforma e come poterla personalizzare al meglio!
Alcune funzioni come the_title()
o the_content()
ci permettono rispettivamente di inserire il titolo e il contenuto di uno specifico articolo o pagina e semplificano sicuramente il lavoro, ma devi sapere che queste informazioni provengono dal database MySQL che salva al suo interno tutte le informazioni relative alla tua installazione WordPress.
Se le due funzioni precedenti ti hanno fatto girare la testa, forse è il momento che tu scopra il nostro corso Crea il tuo primo tema WordPress all’interno del quale ti spieghiamo nel dettaglio tutto quello che devi sapere per creare i temi in questa piattaforma.
Il database MySQL è un componente essenziale per la tua installazione WordPress, in molte occasioni mi riferisco a questo come alla memoria di un sito web perché al suo interno vengono salvate tutte le informazioni relative all’installazione e al suo utilizzo.
Lo scopo di questo articolo non è quello di introdurti alla sintassi MySQL, sono stati scritti diversi libri a riguardo che spiegano meglio questi concetti. Piuttosto in questo articolo voglio descrivere come WordPress utilizza questo database e farti conoscere alcune pratiche che ti permetteranno di velocizzare il tuo sito!
Conoscere il funzionamento di un database e sopratutto come viene utilizzato da WordPress ti permetterà di prendere delle scelte più appropriate e ti faciliterà il compito di ottimizzazione del tuo codice.
[clickToTweet tweet=”Le informazioni contenute in un #database #MySQL collegato a un’installazione #WordPress contengono tutte le informazioni relative alla piattaforma, dal nome del sito alla sua #URL. È bene conoscerlo da vicino!” quote=”Le informazioni contenute in un #database #MySQL collegato a un’installazione #WordPress contengono tutte le informazioni relative alla piattaforma, dal nome del sito alla sua #URL. È bene conoscerlo da vicino!”]
Prima di scoprire tutto questo è necessario fare un passo indietro e porsi una domanda fondamentale.
Che cosa è un database?
Se leggi SkillsAndMore da diverso tempo dovresti sapere che non siamo fan delle definizioni accademiche, per quanto precise e necessarie le troviamo veramente noiose!
Se ti interessano questi tipi di definizioni ti consiglio di leggere quella che trovi su Wikipedia, perché il mio approccio sarà molto più diretto e ricco di esempi.
Dal mio punto di vista un database non è altro che un magazzino in grado di contenere tutte le informazioni che riguardano il tuo sito WordPress.
E quando scrivo tutte, intendo proprio tutte!

Al suo interno vengono salvate informazioni come il titolo del blog, il suo motto, gli articoli, i commenti, le pagine ma oltre a questo non dobbiamo dimenticarci che, come per ogni magazzino che si rispetti, aggiungerà anche i dettagli che ti permetteranno di conoscere lo scaffale e il corridoio di ogni singolo elemento.
Già da questo piccolo esempio puoi capire quante informazioni vengono mantenute all’interno di un singolo database.
[clickToTweet tweet=”Se pensiamo ai #database come a un magazzino, oltre agli elementi contenuti troveremo anche le informazioni su dove trovarle! #WordPress con #MySQL fa tutto questo in automatico, scopri come.” quote=”Se pensiamo ai database come a un magazzino, oltre agli elementi contenuti troveremo anche le informazioni su dove trovarle!”]
Il database non è un’entità immutabile che vive all’interno di un server web, un database può essere personalizzato ed organizzato come meglio si crede. Questa personalizzazione aiuta spesso a migliorare le prestazioni del sito e in questo articolo voglio mostrarti e farti capire come WordPress gestisce questo componente.
La prima cosa che devi sapere è che il database MySQL può essere scomposto in diverse tabelle.
Le tabelle servono a definire delle aree particolari all’interno delle quali si desidera salvare un determinato tipo di informazione. Facciamo un esempio dal vivo, poco fa ti ho detto che WordPress è in grado di salvare un gran numero di informazioni, tra i primi elementi che dicevo erano presenti gli articoli.
Come ormai dovresti sapere, ogni articolo ha diverse sezioni come: titolo, corpo, categorie, tag e qualsiasi altro campo che il tuo tema o un plugin ti permette di aggiungere.
Per esempio dopo aver scritto il tuo articolo, quando premi per la prima volta il bottone salva WordPress andrà a inserire alcune informazioni (chiamati anche record nel gergo dei database) all’interno della tabella wp_posts
mentre altre verranno salvate all’interno di wp_postmeta
.

Prima ancora di scoprire quali informazioni verranno salvate e dove devi capire che queste vengono organizzate all’interno delle tabelle con (indovina un pò) colonne
e righe
.
Quindi proprio come una qualsiasi altra tabella le colonne serviranno per definire il tipo di informazione contenuta mentre le righe collezioneranno tutte le informazioni riguardanti lo stesso articolo che, come dicevo prima, possono assumere anche il nome di record..
Introduzione alle tabelle WordPress
Quindi abbiamo appena scoperto che i database possono contenere al loro interno diverse tabelle che organizzano le informazioni contenute grazie all’aiuto di righe e colonne. Qua sotto puoi vedere una piccola porzione della tabella wp_posts
e a breve ti spiego come è organizzato l’intero database WordPress.

Con l’aiuto di questa immagine dovrebbe essere più semplice riuscire a visualizzare i concetti che ti ho presentato precedentemente come colonne e righe. Per ogni colonna c’è un tipo di informazione contenuta (il contenuto dell’articolo, l’autore del post, il titolo e molto altro) mentre una riga identifica un unico elemento inserito all’interno del database.
Quante tabelle ha WordPress?
Se devo essere sincero, la struttura del database di questa piattaforma non è molto complessa, infatti in un’installazione di base troveremo uno schema di questo tipo (tra parentesi trovi il nome delle tabelle che troverai nel tuo database MySQL):
- Articoli (
wp_posts
) - Commenti (
wp_comments
) - Utenti (
wp_users
) - Meta Articoli (
wp_postmeta
) - Meta Commenti (
wp_commentmeta
) - Meta Utenti (
wp_usermeta
) - Opzioni (
wp_options
) - Link (
wp_links
) - Tassonomie (
wp_termmeta
,wp_terms
,wp_term_taxonomy
,wp_term_relationship
)
Come puoi vedere, con solo 12 tabelle WordPress è in grado di funzionare offrendo già un gran numero di servizi!
È giunto però il momento di scoprire qualcosa in più su queste tabelle…
All’interno della tabella wp_posts
vengono contenute tutte le informazioni di Articoli, Pagine e Custom Post Type creati all’interno della piattaforma. Alcune di queste informazioni sono il titolo, il testo completo, il suo riassunto e alcune informazioni riguardo l’autore e la data di pubblicazione (ad essere sincero ce ne sono molte altre, ma escono dagli scopi di questo articolo).
La tabella wp_postmeta
, invece, è un tipo di tabella che elenca soltanto una serie di chiave/valore e permette di inserire tutte le informazioni aggiuntive che desideri. Per esempio in questa tabella teniamo traccia di tutte le immagini che sono state inserite e molti plugin la utilizzano per collegare informazioni relative al loro utilizzo.
In WordPress, ma in generale in molti sistemi che utilizzano un database come MySQL (un database relazionale) troverai molto spesso delle tabelle che terminano con meta perché sono quelle in grado di collegare i dati contenuti in una tabella con quelli presenti negli altri.
In modo molto simile funzionano le tabelle wp_comments
e wp_commentmeta
, la prima salva le informazioni più importanti mentre la seconda è organizzata con una serie di chiave/valore che anchesse contengono i riferimenti ai diversi elemanti che compongono un commento come per esempio il risultato del controllo svolto da Akismet.
Questo ci porta a scoprire la tabella wp_users
, che contiene informazioni riguardanti gli utenti della tua installazione WordPress come ad esempio l’indirizzo email, la stringa da usare come nome utente, lo slug del nome e molto altro. wp_usermeta
, invece, è creata ad immagine e somiglianza delle precedenti meta tabelle. Un insieme di informazioni aggiuntive riguardanti, in questo caso, gli utenti.
wp_options
è una tabella molto speciale perché è quella incaricata di salvare tutte le impostazioni della nostra installazione WordPress. Cose come la URL principale del sito, ma anche il nome e la tagline sono le principali informazioni che troviamo salvate al suo interno, ma non finisce qua. Questa tabella è in grado di mantenere moltissime altre informazioni come una lista dei plugin attivi, quale tema stiamo utilizzando e qualsiasi altra opzione che viene impostata all’interno della piattaforma.

wp_links
è una tabella che probabilmente scomparirà nelle prossime versioni di WordPress e che veniva utilizzata esclusivamente per una vecchia funzionalità introdotta da questa piattaforma.
A questo punto non ci resta che parlare delle tabelle che definiscono le nostre tassionomie.
Ad un primo sguardo queste tabelle sono un vero macello e bisogna dire che gli sviluppatori WordPress hanno fatto veramente un ottimo lavoro nel fornirci una serie di API che ci permettono di lavorare con le informazioni contenute al loro interno.
Come fare una query MySQL in WordPress
Fino a questo punto l’articolo è stato molto teorico, ti ho spiegato brevemente che cosa sia un database e ho condiviso con te la struttura di quello che viene utilizzato da WordPress.
È giunto il momento di fare un po’ di pratica!
È raro che utilizzerai i metodi che ti presento di seguito, soprattutto se non conosci la sintassi SQL, ma da un punto di vista didattico ritengo che sia utile conoscere la loro esistenza. Chi ha sviluppato siti in PHP e MySQL prima dell’avvento dei CMS Open Source, si ricorderà benissimo la funzione mysql_query()
(oggi addirittura deprecata) che permetteva di inviare una query al database MySQL e salvare il risultato all’interno di una variabile per usarla successivamente all’interno della pagina.
[clickToTweet tweet=”La funzione mysql_query(), oggi deprecata, permetteva di eseguire #query #MySQL da codice #PHP in modo da ottenere le informazioni contenute nel #database da utilizzare successivamente nello script. ” quote=”La funzione mysql_query(), oggi deprecata, permetteva di eseguire query MySQL da codice PHP in modo da ottenere le informazioni contenute nel database da utilizzare successivamente nello script. “]
Bene, che tu ti ricordi o meno la presenza di questa funzione, il mio intento era soltanto quello di farti capire che con il linguaggio PHP abbiamo alcune funzioni che permettono di collegarsi al database mentre grazie a WordPress ne abbiamo altre.
Le prime che mi vengono in mente sono:
$wpdb->get_var();
– grazie al metodoget_var()
è possibile inserire una query SQL, selezionare la colonna e la riga interessata per ottenere il valore cercato;$wpdb->get_row()
– con questa sarà invece possibile selezionare una intera riga. Ad esempio, potresti avere l’id
di un utente e utilizzare questo metodo per andare a prendere delle informazioni presenti nella sua riga;$wpdb->get_col()
– invece di una riga, con questo puoi usare la tua SQL per selezionare soltanto una colonna.
Ovviamente nella pagina del Codex troverai moltre altre funzioni utili e magari anche più adatte ai tuoi scopi ma siamo qua per capire come WordPress può essere di nostro aiuto soprattutto se non abbiamo a nostra disposizione grandi conoscenze MySQL.
L’aiuto delle Classi WP_*
Abbiamo già visto qualche settimana fa la classe WP_Query è una soluzione ideale per creare Loop personalizzati che ci permettono anche di specificare nel dettaglio il tipo di risultato che desideriamo ottenere. Una tra le cose che non ho rilevato al momento, anche perché non interessava direttamente l’argomento trattato, è che le operazioni che eseguiamo con questa classe vengono svolte direttamente con il database.
Questo significa che ogni Loop non è altro che una query MySQL generata automaticamente dalla piattaforma WordPress.
Sicuramente le query generate da uno sviluppatore esperto saranno più ottimizzate rispetto a quelle generate da una macchia (infatti spesso una macchina non può battere un essere umano in creatività), ma sicuramente questo rappresenta un vantaggio per tutti noi piccoli sviluppatori che si trovano a lavorare con clienti che richiedono sempre di più ma sono disposti a spendere sempre meno.
La cosa bella che proviene da tutto questo è che se unisci la semplicità di generazione di queste query con la possibilità di inserirle nella cache del tuo WordPress attraverso le API che ci mette a disposizione, siamo già a un ottimo punto nella ottimizzazione del nostro sistema.
Una cache è un sistema installato all’interno del proprio server che permette di salvare nella memoria determinate informazioni che altrimenti sarebbero più lente da eseguire all’interno di un database, proprio come succede con Loop particolarmente complessi.
Con questo non ti sto consigliando di utilizzare soltanto questi sistemi, perché in informatica niente si fa per caso, ti sto soltanto mostrando come sia possibile ottimizzare le query generate automaticamente da WordPress.
Ma mi sono divulgato anche un pò troppo e non ho ancora presentato le altre classi:
WP_User_Query
– classe creata con lo scopo di rendere più semplice la realizzazione di query MySQL che ci permettono di indagare all’interno delle tabellewp_users
ewp_usermeta
;WP_Meta_Query
– grazie a questa è possibile creare facilmente tutte le query SQL dedicate all’interrogazione delle informazioni contenute nei nostri meta;WP_Comment_Query
– altra classe specializzata nella creazione di query MySQL relative ai commenti ricevuti in un blog.
Come puoi vedere WordPress ha pensato un pò a tutto e grazie alle cache sarai in grado di ottimizzare il tuo lavoro.
Conclusioni
In questo articolo, ispirato dall’ottimo e più tecnico articolo di Scott Taylor, ti ho voluto presentare il database MySQL e come WordPress lo utilizza.
Sono cosciente che non ci sono molte informazioni pratiche, ma di tanto in tanto è necessario fare qualche piccola pausa per fare un pò di teoria e cercare di capire che cosa sia meglio utilizzare al momento perché se il tuo sito genera decine di migliaia di visite al giorno e hai delle query molto complesse da eseguire non esiste un sistema di cache che potrà salvarti dai rallentamenti di caricamento!
Dovrai quindi imparare come creare delle query MySQL o come fare per ottimizzarle ma, il mio consiglio personale, è chiamare un professionista e continuare a fare quello che sai fare meglio, lavorare con WordPress.
In fin dei conti queste situazioni sono veramente rare e saranno altrettante le occasioni per cui ti dovrai rivolgere ad un professionista.
Chiudo qua questo articolo ma prima volevo farti una veloce domanda: Ti è mai capitato di dover ottimizzare le query MySQL? Oppure ti è bastato far leva sulla cache?
Se la tua risposta alla seconda domanda è affermativa, mi interesserebbe sapere se hai sviluppato un sistema di cache tutto tuo o se ti sei appoggiato ad uno dei plugin che si trovano nel repository WordPress.
Grazie dell’ articolo
Figurati Massimo! È sempre un piacere sapere di aver fatto qualcosa di utile 😉
ciao
bell’articolo,io avrei una domanda, sul mio sito utilizzo anche woocommerce e vorrei poter esportare le anagrafiche articoli, ho trovato quasi tutto tranne le immagini ovvero pensavo fossero nella wp_postmeta ma non risultano collegate usando il post id o il meta id, hai qlke suggerimento perchè al momento sono fermo e nn so cos’altro fare, ho spulciato tutti i record con le varie meta_key ma nulla…
grazie
Ciao Andrea,
in tutta onestà quello che mi stai dicendo esce un po’ dalle mie conoscenze perché non sono un grande appassionato di WooCommerce. Cmq sia girando un po’ in rete si riescono a trovare degli articoli che moffrono qualche dritta.
Purtroppo non posso esserti di estremo aiuto perché non sono un grande utilizzatore di query MySQL. Hai mica provato ad utilizzare WP_Query?
Ciao, volevo sapere se posso svuotare le tabelle dei commenti (quali sono) dal pannello di controllo di MySql perchè sono talmente tanti che nn posso più cancellarli dall’amministrazione di wp. Non vorrei fare danni. Grazie mille della risposta
Non te lo consiglio, rischi di fare danni e far saltare i riferimenti interni di wordpress. Imposta come visualizzazione su wordpress in impostazioni schermata tipo 100 elementi così con un colpo solo puoi cancellarne un centinaio.
Ciao, in quale tabella sono contenuti i testi delle Pages (non dei post)?
Grazie
Ciao
Ciao, grazie per l’articolo, decisamente interessante.
Io sto approcciando solo ora a questa realtà informatica, penso di aprire un blog per affiliate marketing con wordpress ma non mi è chiara una cosa, il database MySQL, quando installi WordPress, è già compreso ed agganciato o è una cosa che devi installare e gestire a parte??
Io non sono per cosi dire uno smanettone, ma seguendo diversi tutorial e gruppi pare che non sia cosi complesso crearsi un blog con wordpress a meno che tu non voglia intervenire sui codici (cosa che io non farò), ma non capisco questa cosa del database, pare sia essenziale per far funzionare WP ma non capisco se sono due cose che devi installare separatamente.
Grazie, Andrea.
Ciao Andrea,
il database è un servizio separato all’interno del tuo server web. Cercando di semplificare al massimo diciamo che quando attivi un piano di hosting tu prendi in affitto una parte di un computer connesso online, questo computer si chiama server e offre diversi servizi, tra questi c’è il database.
A questo punto quello che interessa sapere a te è che il database non è altro che la memoria del tuo sito web, il posto dove vengono salvati tutti gli articoli, utenti e praticamente qualsiasi altra viene visualizzata dal tuo sito web. Molti hosting ti permettono di creare un numero X di ‘memorie’ per il tuo sito web, ciascuna di queste deve essere collegata a un sito generalmente con un rapporto uno ad uno. Probabilmente tu ti stai preoccupando perchè 1) hai scelto un hosting “scadente” che non ti semplifica la vita o 2) non hai ancora iniziato a sporcarti le mani sperimentando un po’
Qualunque sia il caso è molto comprensibile, ti stai affacciando a un mondo nuovo e ci sono fin troppe nozioni.
Dato il tuo interesse ti consiglio di seguire una di queste due strade:
La seconda opzione è quella che ti consiglio se vuoi avere il tuo dominio e se non ti dispiace investire un po’ di soldi ed avere un tuo dominio di primo livello (tuonome.it al posto di tuonome.wordpress.com reso disponibile gratuitamente dall’omonimo sito), scegliendo quest’ultima sarai in grado di personalizzare il tuo sito come meglio credi e aggiungere tutte le funzionalità che desideri.
Spero di aver chiarito i tuoi dubbi e ti faccio i miei migliori auguri per l’inizio di questa avventura.