Database
 sql >> Database >  >> RDS >> Database

WordPress – Dietro le quinte, parte 2

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 nel wp_posts table è un "riferimento" all'attributo "ID" nel wp_users tabella.
  • La maggior parte delle tabelle utilizza una chiave primaria a colonna singola. Sono denominati semplicemente "ID" (nel wp_users e il wp_posts tabella) o meta_id /umeta_id (nelle meta tabelle:wp_postmeta , wp_commentmeta e wp_usermeta ), o una combinazione del nome della tabella e del suffisso “_id” (tutte le altre tabelle). L'unica eccezione a queste regole è il wp_term_relationships tabella, dove la chiave primaria è costituita dai due attributi:object_id e term_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 al wp_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. Come comment_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 un post_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 per post_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 con post_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 al wp_posts tabella.
  • meta_key – una descrizione di un meta_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 di name .
  • 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 al wp_terms tabella.
  • taxonomy – il nome della tassonomia.
  • description – una descrizione di un termine in quella particolare tassonomia.
  • parent – un riferimento al termine padre nel wp_terms tabella.
  • count – il numero di oggetti nel wp_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 al wp_posts tabella.
  • term_taxonomy_id – un riferimento al wp_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.