Nella prima parte di questa serie sui dati in WordPress, ho fornito una panoramica delle tabelle del database di WordPress e quali tabelle sono utilizzate per memorizzare il tipo di dati. In questa seconda parte illustrerò come WordPress gestisce le relazioni tra i dati.
Come vedrai, WordPress utilizza tre tipi di relazioni dati: one-to-one, one-to-many e many-to-many. Vedrò ognuno di questi e cosa significano per il tuo sito WordPress.
Una relazione uno-a-uno è la relazione più semplice di tutti - significa semplicemente che un record è correlato a un altro. Dati come questo sono generalmente memorizzati in una tabella (anche se non sempre, come vedremo più avanti in questo tutorial).
Esempi di relazioni one-to-one in WordPress includono:
L'elenco potrebbe continuare, ma il punto principale è che tutti e due i record che sono memorizzati in campi diversi in una riga di una tabella hanno una relazione uno a uno.
Le relazioni uno-a-uno, tuttavia, sono il tipo meno interessante di relazione tra database. Quindi, senza ulteriori indugi, passiamo a un tipo di relazione usato molto da WordPress - uno-a-molti.
Le relazioni da uno a molti sono molto comuni nei database e sono ciò che rende un database più potente di una tabella "piatta" come un foglio di calcolo. Questi si verificano quando un record ha una relazione con più di un altro record.
In WordPress, la maggior parte delle relazioni uno-a-molti sono create da un collegamento tra due tabelle del database, utilizzando un identificativo univoco per unire le due. Quindi per esempio, il post_id
il record sarà unico per ogni post memorizzato in wp_posts
tavolo, ma sarà usato anche nel wp_comments
tabella per identificare in quale post è stato pubblicato un commento. Questo significa che ciascuno post_id
valore apparirà solo una volta nel wp_posts
tabella ma potrebbe apparire più volte - o non del tutto - nel wp_comments
tavolo.
Alcuni altri esempi in WordPress includono:
Di nuovo, la lista continua. Poiché questo è un argomento importante in WordPress, diamo un'occhiata alle relazioni uno-a-molti in modo più dettagliato.
La tabella che è collegata alla maggior parte delle altre tabelle è la wp_posts
tabella e la maggior parte delle relazioni create da queste connessioni sono relazioni uno-a-molti.
Come puoi vedere nello schema qui sotto, il wp_posts
la tabella è collegata a quattro altre tabelle:
Oltre a questo, i post possono anche avere una relazione uno-a-molti con altri post, sotto forma di allegati o pagine padre.
Diamo un'occhiata a queste relazioni in modo più dettagliato.
Come spiegato sopra, i dati memorizzati nel wp_posts
tabella può avere una relazione uno-a-molti con altri dati nella stessa tabella; tuttavia, questa relazione non è tra ciò che si potrebbe pensare di post, ma invece tra post e allegati o pagine e altre pagine. Dopo tutto, gli allegati e le pagine sono tipi di post.
Un allegato memorizzato in wp_posts
tavolo avrà un record nel post_parent
campo, che sarà l'ID del post a cui è allegato l'allegato (con scuse per la ripetizione!). Questa è una relazione uno-a-molti perché ogni allegato avrà un solo genitore, mentre ogni post potrebbe avere molti allegati. Questo si applica anche se hai utilizzato Media Manager per aggiungere un allegato a un altro post - solo il post a cui è stato originariamente aggiunto verrà archiviato nel database come genitore.
I post possono anche avere una relazione uno-a-molti con altri post quando una pagina viene specificata come genitore di un'altra. Il record è archiviato sulla pagina figlio, nel file post_parent
campo - di nuovo questo sarà il post_id
della pagina madre. Questa è una relazione uno-a-molti perché le pagine padre possono avere molte pagine figlio ma le pagine figlio avranno una sola pagina madre.
Quando si pensa alle relazioni tra post come questo, è importante ricordare che quando si prende in considerazione la gestione dei dati di WordPress, i post non sono quelli che potreste normalmente riferire come post. Includono pagine, allegati e altri tipi di post, che sono tutti archiviati nel wp_posts
tavolo.
I metadati della posta sono memorizzati nella propria tabella wp_postmeta
. Questa tabella include solo quattro campi: per post_id
, il meta_id
, la chiave e il valore. Un post può avere molti elementi di metadati post associati ad esso, ma ogni record di metadati post sarà collegato a un solo post.
I commenti hanno anche il loro tavolo, wp_comments
. Ogni commento riguarderà solo un post, mentre ogni post può contenere più commenti memorizzati. Come con tutte le altre tabelle collegate a wp_posts
, il post_id
campo viene utilizzato per il collegamento (nel file comment_post_id
campo in wp_comments
).
Il wp_comments
tabella ha 15 campi per impostazione predefinita, per memorizzare i dati sull'autore, l'indirizzo email dell'autore, il commento stesso e il suo stato di approvazione. È anche collegato al wp_users
tavolo, come vedremo nella prossima sezione.
I commenti hanno anche i loro metadati, memorizzati in un'altra tabella, che arriverò a breve.
Ogni post è collegato al wp_users
tavolo tramite il ID utente
registrare, che è memorizzato nel post_author
campo in wp_posts
. Questa è una relazione uno-a-molti perché ogni post ha un solo autore ma ogni utente può essere l'autore di più post.
La relazione tra post e utenti è diversa da quella tra post e commenti o metadati perché la sua natura è di un utente, più post, non un post più commenti o record di dati di mete. Questo è il motivo per cui il ID utente
campo fornisce il link invece del post_id
campo.
Ci sono anche tre relazioni che sono uno-a-molti e non implicano post. Due di questi riguardano i metadati: la relazione tra i commenti e i relativi metadati e gli utenti e i relativi metadati.
WordPress memorizza ulteriori metadati sugli utenti in wp_usermeta
tavolo. Generalmente viene utilizzato per dati non standard sugli utenti, come i metadati relativi ai superadmin in un'installazione multisito e metadati relativi ai colori di amministrazione selezionati dall'utente se questi non sono predefiniti.
La maggior parte dei dati sugli utenti sarà nel wp_users
tavolo. Le due tabelle sono collegate tramite il ID utente
campo e un record utente avranno più elementi di metadati ad esso associati, mentre ciascun elemento di metadati si applicherà solo a un utente.
Ancora una volta, la maggior parte dei dati sui commenti è memorizzata nel wp_comments
tavolo insieme al commento stesso, ma il wp_commentmeta
tabella è usata per memorizzare metadati aggiuntivi come dati creati da plugin come Akismet. La relazione è la stessa di quella tra utenti e usermeta.
La relazione finale uno-a-molti è tra commenti e utenti. Il wp_comments
tabella include il ID utente
campo, che può essere utilizzato per memorizzare l'ID utente quando un utente che ha effettuato l'accesso ha pubblicato un commento. Si noti che questo campo non è obbligatorio per quei siti in cui gli utenti non devono essere registrati per commentare.
Il tipo finale di relazione con il database è la relazione uno-a-molti, in cui il collegamento molti va in entrambe le direzioni. Questo è usato solo una volta in WordPress, per i termini di tassonomia (incluse categorie e tag in quanto questi sono semplicemente tassonomie). Ad un post possono essere assegnati molti termini e un termine può essere assegnato a più post.
WordPress crea questa relazione nello stesso modo di qualsiasi altro database con database manay-to-many: utilizzando una tabella temporanea che collega le due tabelle con i dati chiave. Questo è il wp_term_relationships
tabella, che collega il wp_posts
tavolo al wp_term_taxonomy
tavolo.
Nota: questa tabella collega anche il wp_links
tavolo al wp_term_taxonomy
tabella, poiché i collegamenti si comportano più o meno allo stesso modo dei post: entro breve arriverò ai link.
Questo è più facilmente spiegato guardando prima le due tabelle esterne. Il wp_posts
tabella contiene dati su ogni post, mentre il wp_term_taxonomy
la tabella contiene dati su ciascun termine, inclusa la tassonomia in cui si trova e il suo ID.
Per creare un collegamento tra un termine nel wp_term_taxonomy
tavolo e un post nel wp_posts
tabella, WordPress crea un record nel wp_term_relationships
tabella, che include il post_id
e il term_id
(memorizzato come object_id
e term_taxonomy_id
rispettivamente nel wp_term_relationships
tavolo). Ciò significa che il wp_term_relationships
tabella può includere più record per ogni post e più record per ogni termine, creando la relazione molti-a-molti.
Lo schema seguente mostra come funziona:
Nell'esempio sopra, i post hanno i seguenti termini:Puoi anche guardarlo dall'altra parte: per esempio, il termine 3 si riferisce ai post 1 e 4.
Comunque le cose non si fermano qui. C'è un quarto tavolo, il wp_terms
tavolo. Questo contiene dati su ogni termine, vale a dire il nome, la lumaca e la descrizione per ogni termine. Ogni termine ha solo un record nel wp_terms
tavolo, quindi la relazione tra questo e il wp_term_taxonomy
il tavolo è in realtà uno a uno. In teoria, non c'è motivo per cui questi dati non possano essere trattenuti nel wp_term_taxonomy
tavolo, ma non lo è.
I collegamenti, o il blogroll, sono una caratteristica di WordPress che è molto meno importante di una volta. Infatti, poiché i collegamenti della versione 3.5 sono stati disattivati nell'amministratore per impostazione predefinita; tuttavia, hanno il loro tavolo: il wp_links
tavolo.
Questo è molto simile al wp_posts
tavolo. Dopo tutto, i collegamenti sono un tipo di contenuto molto simile ai post) e hanno la stessa relazione molti-a-molti con termini di tassonomia.
Come abbiamo visto, WordPress utilizza una varietà di relazioni per collegare i dati in 10 delle sue 11 tabelle del database. L'unico tavolo che non ho menzionato qui è wp_options
, perché non è collegato ad altre tabelle, in quanto memorizza semplicemente i dati sul sito, piuttosto che sul contenuto. Ne parlerò più in dettaglio più avanti in questa serie.
Comprendendo le relazioni one-to-one, one-to-many e many-to-many in WordPress, è possibile identificare i modi per manipolare i dati e scrivere query personalizzate nel tema e / o nei plugin.
Nella parte successiva di questa serie, tratterò i tipi di contenuti in modo più dettagliato, esaminando i tipi di contenuto memorizzati nel database di WordPress e le somiglianze e le differenze tra loro.