Nella parte 1 di questa serie, ho dimostrato come installare WordPress in locale e come importare un database WordPress in Vertabelo. In questo articolo daremo un'occhiata più da vicino alle tabelle nel database di WordPress.
Una rapida occhiata al modello di database di WordPress e al dashboard
Nella parte precedente, ho importato il database di WordPress nel nostro strumento di modellazione del database online. Per la cronaca, la struttura del database è la seguente:
Ci sono un paio di fatti importanti sul modello di database di WordPress che dovresti capire prima di iniziare:
- Ogni sito WordPress utilizza esattamente la stessa struttura del database. Contiene 11 tabelle e ogni sito WordPress le utilizza in background. La maggior parte dei plugin di WordPress utilizza anche il database senza alcuna modifica nel modello del database. Il modello deve essere sufficientemente flessibile da ospitare tutti i diversi plugin. Naturalmente, i creatori di plugin possono aggiungere tabelle personalizzate per plugin specifici se la struttura dei dati è significativamente diversa o se il loro plugin memorizza grandi quantità di dati.
- Il database di WordPress non ha vincoli di chiave esterna . Ciò è dovuto al fatto che WordPress utilizza il motore di archiviazione MyISAM, che non supporta le chiavi esterne. Le tabelle aggirano questo problema disponendo di attributi che memorizzano valori simili a "chiave esterna" non collegati, quindi il vincolo di chiave esterna non verrà verificato dal database. Ad esempio, il
post_author
attributo nelwp_posts
table è un "riferimento" all'attributo "ID" nelwp_users
tabella. - La maggior parte delle tabelle utilizza una chiave primaria a colonna singola. Sono denominati semplicemente "ID" (nel
wp_users
e ilwp_posts
tabella) ometa_id
/umeta_id
(nelle meta tabelle:wp_postmeta
,wp_commentmeta
ewp_usermeta
), o una combinazione del nome della tabella e del suffisso “_id” (tutte le altre tabelle). L'unica eccezione a queste regole è ilwp_term_relationships
tabella, dove la chiave primaria è costituita dai due attributi:object_id
eterm_taxonomy_id
. Gli attributi che sono chiave primaria o parte di una chiave primaria sono del tipo bigint(20). Anche le chiavi primarie con attributo singolo hanno la proprietà di incremento automatico impostata su "Sì".
Post e pagine
Il motivo principale per utilizzare WordPress è creare e manipolare contenuti e presentarli al pubblico. A tal fine, WordPress ci fornisce due tipi di contenuto:Pagine e Post .
Pagine vengono utilizzati per visualizzare contenuti statici . Non utilizzano tag o categorie e non sono elencati per data. Inoltre non consentono commenti o condivisione sui social media. Le pagine possono avere sottopagine. Chi siamo le pagine sono buoni esempi di questo tipo.
D'altra parte, Post sono elencati per data e possono essere organizzati utilizzando le categorie e tag . I post possono essere utilizzati nei feed RSS, grazie al loro ordine cronologico. I post non possono avere "sottopost", ma sono possibili commenti e condivisioni sui social media. I post sono essenzialmente post di blog. Questo è comprensibile, dal momento che WordPress si è evoluto da una piattaforma di blogging.
La tabella principale dietro il contenuto di qualsiasi pagina di WordPress si chiama wp_posts
:
WordPress utilizza il wp_posts
tabella per memorizzare pagine, post e allegati. Possiamo considerare questa tabella come il fulcro della nostra pagina, il luogo in cui viene archiviata la maggior parte del contenuto. È importante sottolineare che gli allegati sono effettivamente archiviati su disco e il record nel wp_posts
la tabella conserva maggiori informazioni a riguardo (chi l'ha caricata e quando, ecc.).
I campi nel wp_posts
tabella sono:
post_author
– un riferimento alwp_users
tabella, che indica l'autore del post.post_date
– la data e l'ora in cui il record è stato inserito nella tabella.post_date_gmt
– la data e l'ora GMT/UTC in cui un record è stato inserito nella tabella.post_content
– il contenuto effettivo del post.post_title
– il titolo del post.post_excerpt
– un riepilogo del contenuto.post_status
– lo stato attuale del post. WordPress utilizza 8 stati predefiniti:"Pubblica", "Futuro", "Bozza", "In attesa", "Privato", "Cestino", "Bozza automatica" ed "Eredita".comment_status
– attiva e disattiva i commenti su un singolo post o su un'intera pagina. Sono possibili due valori:“aperto” e “chiuso”.ping_status
– identifica se un post consente pingback e trackback. Comecomment_status
, può contenere solo i valori “aperto” e “chiuso”.post_password
– la password utilizzata per visualizzare il post (opzionale).post_name
– l'URL leggibile di unpost_title
.to_ping
– un elenco di URL a cui WordPress dovrebbe inviare pingback, delimitato da "\n".pinged
– un elenco di URL a cui WordPress ha inviato pingback, delimitato da "\n".post_modified
– la data e l'ora più recenti in cui un post è stato modificato.post_modified_gmt
– la data GMT/UTC perpost_modified
.post_content_filtered
– utilizzato dai plug-in per memorizzare nella cache costose trasformazioni dei contenuti dei post.post_parent
– fa riferimento al post principale.guid
– Identificatore univoco globale per un post; il suo URL permanente.menu_order
– utilizzato per l'ordinazione dei contenuti.post_type
– il tipo di registrazione. Può contenere i valori "post", "pagina", "allegato" o tipi personalizzati definiti dall'utente.post_mime_type
– il tipo di file caricati definito solo per i post conpost_type = attachment
. Può contenere valori come "immagine", "applicazione/pdf" e "applicazione/msword".comment_count
– il numero di commenti, pingback e trackback del post.
Ecco un'istantanea del wp_posts
tabella dopo aver aggiunto la pagina "Informazioni su Nikola Tesla":
Quando diamo un'occhiata a wp_posts
tabella, possiamo vedere alcune versioni della nostra pagina. Il record con ID = 1
ha post_status = publish
, il che significa che il post è visibile a tutti. Il comment_status = closed
e ping_status = closed
indica che i commenti e i ping sono disabilitati per questo post.
Qualsiasi informazione aggiuntiva su post e pagine è conservata nel wp_postmeta
tabella:
Le colonne di questa tabella sono le seguenti:
meta_id
– la chiave primaria della tabella.post_id
– un riferimento alwp_posts
tabella.meta_key
– una descrizione di unmeta_value
attributo.meta_value
– il valore effettivo memorizzato.
Il wp_postmeta
la tabella è dove tutte le informazioni che non possono essere salvate nel wp_posts
la tabella è memorizzata. Viene archiviato come coppie chiave-valore, una tecnica spesso chiamata entità-attributo-valore (EAV). La tabella può essere utilizzata dai plugin per esigenze personalizzate.
Tassonomie di WordPress
Tassonomia è una parola di fantasia che fondamentalmente si riferisce al raggruppamento di cose insieme. WordPress ha un paio di tassonomie integrate per raggruppare i post. Ad esempio, categorie e tag sono tassonomie integrate in WordPress. Puoi anche aggiungere le tue tassonomie personalizzate a WordPress.
Le tassonomie ei relativi termini sono conservati in tabelle denominate wp_terms
, wp_term_taxonomy
e wp_term_relationships
.
Il wp_terms
la tabella memorizza un elenco di termini utilizzati per classificare gli oggetti nel tuo sito WordPress:
Questa tabella contiene tutti i nomi di tag e categorie, nonché i termini delle nostre tassonomie personalizzate. Gli attributi sono i seguenti:
term_id
– la chiave primaria della tabella.name
– il nome del termine.slug
– l'URL diname
.term_group
– utilizzato per raggruppare i termini.
Ecco i contenuti del wp_terms
tabella:
I termini vengono assegnati alle tassonomie con l'aiuto del wp_term_taxonomy
tabella:
Gli attributi nella tabella sono:
term_taxonomy_id
– la chiave primaria della tabella.term_id
– il riferimento alwp_terms
tabella.taxonomy
– il nome della tassonomia.description
– una descrizione di un termine in quella particolare tassonomia.parent
– un riferimento al termine padre nelwp_terms
tabella.count
– il numero di oggetti nelwp_posts
tabella che utilizza questo termine in questa tassonomia.
Il wp_term_taxonomy
table ci consente di riutilizzare lo stesso termine in diverse tassonomie. Nota che il record dove term_id = 1
ha taxonomy = category
, mentre gli altri record hanno taxonomy = post_tag
.
Per mettere in relazione oggetti salvati nel wp_posts
e il wp_term_taxonomy
tabelle, WordPress utilizza il wp_term_relationships
tabella:
Nota che questa è l'unica tabella nel modello che ha una chiave composta da più di un attributo.
Il wp_term_relationships
tabella ha i seguenti attributi:
object_id
– un riferimento alwp_posts
tabella.term_taxonomy_id
– un riferimento alwp_term_taxonomy
tabella.term_order
– il termine ordine per un oggetto specifico.
Abbiamo sei record qui che collegano sei record dal wp_term_taxonomy
tabella con il post (object_id = 6
).
Commenti e modellazione dei dati di WordPress
Siamo riusciti a posizionare alcuni contenuti sulla nostra pagina WordPress. È bello, ma nella maggior parte dei casi vogliamo ricevere feedback dal pubblico. E questo è il ruolo della funzione di commento.
Per visualizzare i commenti sui post, possiamo semplicemente utilizzare "Lascia un commento" o fare clic su "X Commento" (dove X sta per il numero di commenti per il post).
Il nostro primo post ha già un commento. Quando facciamo clic su di esso, vedremo che è un commento automatico causato dal pingback. Aggiungeremo un altro commento a quel post:
Ora vediamo due commenti per il nostro post, ma cosa si cela dietro tutto nel database?
Puoi intuire dal nome della tabella che il wp_comments
la tabella viene utilizzata per memorizzare i commenti sulla nostra pagina WordPress:
Gli attributi sono per lo più autoesplicativi, ma daremo comunque un'occhiata più da vicino ad alcuni di essi.
Il comment_post_ID
è un riferimento al wp_posts
tavolo; indica quale post ha ricevuto commenti. Per il primo commento, possiamo vedere che in realtà si trattava di un pingback e che "l'autore" è un altro post. Per il secondo commento, possiamo vedere che sono l'autore. Nota anche il comment_agent
contiene alcune informazioni di base sul sistema e sul computer utilizzati per pubblicare un commento.
L'idea principale alla base di tutte e tre le metatabelle nel modello è archiviare i dati che non vogliamo archiviare nella nostra tabella principale. Il wp_commentmeta
è correlato al wp_comments
tabella nello stesso modo in cui wp_postmeta
la tabella è correlata al wp_posts
tabella.
Vedere gli utenti di WordPress
Dopo che la nostra pagina è online, chiunque può vederla. Gli utenti di WordPress sono quelli che, in base al loro stato di autorizzazione, possono apportare modifiche al nostro sito e al suo contenuto.
Ora daremo uno sguardo al wp_users
e il wp_usermeta
tabelle nel database MySQL.
Come previsto, il wp_users
la tabella mostrata sopra memorizza i dati di base per tutti gli utenti registrati sul nostro sito WordPress. Nota che il user_pass
è crittografato e che NewUser ha la user_activation_key
attributo riempito mentre edrkusic ha quel campo vuoto.
Mentre gli attributi sono elencati in wp_users
table sono ciò che ci aspetteremmo da qualsiasi sito WordPress, il wp_usermeta
la tabella viene utilizzata per memorizzare valori che potrebbero essere specifici di un determinato progetto:
Ad esempio, nota che il record con umeta_id = 25
contiene il valore "alcune informazioni biografiche" , lo stesso testo che abbiamo digitato nella dashboard durante la modifica di NewUser. Il user_id
l'attributo in quel record ha valore 2 , che corrisponde all'ID NewUser nel wp_users
tavolo. Ovviamente, il user_id
è un riferimento al wp_users
tabella.
Link e opzioni in WordPress
L'idea alla base del wp_links
tabella serve per memorizzare i collegamenti ad altri siti:
Avere collegamenti ad altri siti era molto popolare all'inizio dell'era dei blog; al giorno d'oggi è usato sempre meno. A partire dalla versione 3.5 di WordPress, l'amministrazione dei collegamenti è stata persino rimossa dall'interfaccia di amministrazione. Tuttavia, questa tabella viene mantenuta per fornire compatibilità con le versioni precedenti.
Il wp_options
la tabella memorizza i dati sull'installazione di WordPress, la configurazione del sito, il tema, i plug-in e i widget:
Viene anche utilizzato per archiviare dati temporanei memorizzati nella cache. La logica EAV è presente anche in questa tabella, così come in wp_usermeta
, wp_postmeta
e wp_commentmeta
. L'attributo option_name
svolge il ruolo di chiave, mentre l'attributo option_value
è il suo valore corrispondente. Gli altri due attributi nella tabella sono l'attributo della chiave primaria option_id
e autoload
, che controlla se un'opzione viene caricata automaticamente dal database.
Valutazione del modello di database di WordPress
Il modello di database alla base di WordPress non segue diverse regole e convenzioni di progettazione di database valide. Quando progettiamo un database per uno scopo specifico, conoscendo in anticipo tutte le sue funzionalità desiderate, possiamo seguire tutte queste regole. Ma WordPress deve coprire tutto ciò che chiunque potrebbe avere in mente, quindi sacrificare chiavi esterne e utilizzare EAV è qualcosa che deve essere fatto. Chiamerei l'attributo ID lo stesso in tutte le tabelle e farei lo stesso con le "chiavi esterne". Ad esempio, non userei post_author
nel wp_posts
tabella, ma continuerei con users_id
. A parte questo, devo essere d'accordo sul fatto che il database di WordPress è davvero un ottimo modello per il suo scopo.
Cosa ne pensi? Fatecelo sapere nella sezione commenti.