Gestisci il Database con WordPress

Devo dire che nelle ultime lezioni, le cose si sono fatte veramente interessanti, sei partito con l'apprendere come dichiarare una semplice variabile in PHP e sei arrivato a conoscere cicli, funzioni e inclusioni che velocizzano e rendono più ordinato il tuo sviluppo.

Contenuti Extra

Ma se ti ricordi bene, proprio nella prima lezione di questo corso, ti ho introdotto al concetto di database; la memoria di qualsiasi sito web. Dal mio personale punto di vista, un database non è altro che un archivio che possiede diversi cassetti (termine tecnico: tabelle), al loro interno è possibile salvare delle informazioni che verranno richiamate dal sito e permettono di far ricordare a quest’ultimo le cose che abbiamo fatto in precedenza.

La possibilità di scrivere pagine, articoli, creare menu, aggiungere impostazioni SEO e molte delle opzioni che vengono salvate in un sistema WordPress, vengono tutte immagazzinate all’interno di un database, per essere precisi, all’interno del database MySQL. Lo scopo di questa lezione sarà quindi quello di presentarti le funzioni e i metodi (spiegherò questo nuovo termine a breve) che ti permettono di collegarti all’interno del database e richiedere le informazioni di cui avrai bisogno.

Ho scelto di tagliare fuori la connessione ad un database MySQL dal punto di vista PHP per più motivi, i principali sono: perché in questo corso voglio portarti ad apprendere il linguaggio PHP passando per WordPress e, successivamente, perché esistono veramente molte soluzioni che permettono al linguaggio PHP di collegarsi ad un database.

Abbiamo un corso completamente rinnovato! Se sei interessato ad Apprendere il PHP con WordPress, non ti puoi perdere il nuovo corso apparso su skillsAndMore. Sei soltanto a un click di distanza 😉

Se ti stai chiedendo come puoi apprendere a connetterti ad un database con PHP ti dico immediatamente che tutta la documentazione sarà presente all’interno dei materiali aggiuntivi che verranno inseriti in questo corso ma, se hai furia di scoprirlo o non ritieni che le mie guide siano all’altezza del prezzo richiesto, puoi semre andare su Google e cercare una delle centinaia di guide pubbliche presenti nel web. No hard feelings.

Perché collegarsi?

Ebbene sì; perché ti devi collegare ad un database per poter utilizzare WordPress? Perché WordPress ha bisogno di un database per poter funzionare?

Quando ci colleghiamo ad un database, a seconda dei permessi del nostro utente (utente database e non utente WordPress), avremmo la possibilità di svolgere un gran numero di compiti, alcuni di questi permettono di aggiungere o modificare i contenuti presenti al suo interno (scrivere) altri permettono di leggerli (lettura).

Le azioni che ti ho inserito all’interno delle parentesi tonde, per quanto possono sembrare semplici, sono le azioni fondamentali che potrai svolgere con un database e sono quelle che permettono a WordPress di salvare un articolo (scrivere nel database le nuove informazioni) oppure di mostrare l’ultimo articolo pubblicato nella homepage (lettura dei dati presenti).

Senza andare troppo nello specifico, all’interno di un database è possibile inserire un gran numero di informazioni. Ti basta pensare che siti come il blog di eBay, quello di TED o il più tecnico TechCrunch utilizzano tutti WordPress che, di conseguenza, usa un database MySQL per salvare migliaia di articoli e permette a milioni di utenti di consultare i propri contenuti, ancora una volta, scrittura e lettura.

cassetto

Tornando all’esempio dell’archivio che ti ho presentato ad inizio articolo, voglio chiederti: ti ricordi i cassetti? Quelli che adesso stai visualizzando come dei cassetti, all’interno del database MySQL prendono il nome di tabella, dentro la quale, è possibile inserire un gran numero di elementi. Facciamo un esempio dal vivo… Andiamo a vedere velocemente come WordPress salva i tuoi articoli all’interno del database e come organizza queste informazioni.

Ecco come si presenta la tabella wp_posts

Questa immagine rappresenta soltanto una parte della tabella wp_posts, WordPress salva molte altre informazioni ma per mantenere le cose semplici ho preferito lasciare da parte alcune informazioni che avrebbero semplicemente complicato i concetti senza presentare alcuna informazione valida. Se vuoi vedere dal vivo la completa struttura di un database configurato per WordPress hai due possibilità:

  1. apri questa pagina del Codex che presenta l’intero database e contiene l’immagine completa della sua struttura, quella che vedi sopra è solo una sua porzione;
  2. oppure apri l’applicazione web phpMyAdmin (che viene preinstallata all’interno di MAMP 😉 ) e la osservi dal vivo.

Ma devo comunque spiegarti che cosa significa nel dettaglio l’immagine che ho appena caricato, quindi, continua pure a leggere.

Come dicevamo, l’immagine rappresenta la struttura della tabella wp_posts che, come ogni altra tabella che si rispetti, può immagazzinare i dati al suo interno con l’uso delle colonne. Tutti i nomi che trovi all’interno della tabella, come ad esempio post_title, post_author e comment_status, sono i nomi di queste colonne. Puoi notare che a sinistra di questi nomi è presente un’icona, che cambia a seconda delle relazioni della colonna, mentre sulla destra di questo trovi dei nomi strani come BIGINT(20) oppure VARCHAR(100), che non fanno altro che assegnare il tipo di valore che dovrà contenere questa colonna.

Senza perdere troppo tempo nella descrizione dei valori che si possono assegnare ad una colonna MySQL che, per certi versi, sono gli stessi valori usati in PHP ma dichiarati in modo differente; passiamo dalla struttura del database all’attuale visualizzazione dei dati in esso contenuti.

Ecco il Contenuto della Tabella wp_posts

phpMyAdmin aiuta a consultare il database

L’immagine che ti ho appena inserito mostra il contenuto presente nel mio database, come puoi vedere tu stesso, le parole nella prima riga della tabella (quelle scritte in blu per capirsi) sono le stesse parole che ti ho presentato precedentemente e definiscono, appunto, le colonne della tabella. In questo modo è facile comprendere che ogni riga (row) presente nel database rappresenta una informazione completa, in questo caso, un articolo.

Avremo altre occasioni per andare ad affrontare il discorso MySQL anche da un punto di vista più approfontito, per oggi mi sembra di averti introdotto già abbastanza teoria; è ora di fare sul serio, non credi?

Come Collegarsi al database con WordPress

Dato che WordPress basa il proprio funzionamento su questo database, è normale aspettarsi che ogni pagina che questa piattaforma visualizza nel nostro browser è stata anche generata grazie ai contenuti presenti nel database. Ricordi quando nella scorsa lezione abbiamo trattato l’inclusione di file esterni?

In questo caso specifico WordPress include i dati che gli servono per montare la pagina che sono presenti all’interno del database ma, per farlo, deve essere in grado di accedere e consultare le informazioni necessarie. Quindi, ha bisogno di includere un file esterno che contiene tutti i dati che gli permetteranno si gestire il database.

Il file in questione, nonché uno dei più importanti per quanto riguarda il corretto funzionamento della propria piattaforma, prende il nome di wp-config.php e lo troverai all’interno della cartella principale (la root) della tua installazione WordPress. Contenuti in questo singolo file, ci sono molte informazioni che permettono di fornire una configurazione iniziale alla nostra installazione. Quest’oggi ci interesseremo della connessione al database e lasceremo ad altre lezioni la possibilità di conoscere da vicino altri aspetti di questo file.

La porzione di codice che trovi qua sopra è la stessa che dovrai andare a modificare all’interno del tuo wp-config.php per permettere a WordPress di contattare senza problemi il database e scrivere o leggere all’interno delle sue tabelle. Fossi in te non starei molto a preoccuparmi del significato di queste costanti, dato che tutte le informazioni al suo interno saranno già state fornite durante l’installazione di WordPress ma, se vuoi capire meglio cosa significa il codice appena presentato, ti ho preparato questa veloce lista:

  • DB_NAME in questo campo devi inserire il nome del database che puoi creare grazie all’aiuto di phpMyAdmin o del pannello di amministrazione che ti viene fornito dal tuo hosting;
  • DB_USER e DB_PASSWORD nome e password dell’utente in grado di gestire il database MySQL appena creato (se stai usando MAMP questi sono generalmente root e root);
  • DB_HOST ovvero la URL che WordPress può utilizzare per raggiungere il nostro database ed eseguire l’autenticazione;
  • DB_CHARSET e DB_COLLATE sono due parametri che, tranne rari casi, non hanno neanche bisogno della nostra attenzione e permettono di impostare alcune opzioni avanzate nell’uso del database.

Se hai fatto attenzione, prima di questa lista ho evidenziato la parola costante. Questo è un tipo molto particolare di variabile PHP perché anche se permette di dare un nome ad un valore, come ad esempio per DB_NAME, questo valore non può essere modificato e resterà lo stesso per tutta l’esecuzione del nostro programma.

Siamo Connessi, Cosa Fare Adesso?

Adesso che sai dove WordPress tiene le informazioni per connettersi al tuo database (e ti assicuro che lo fara spesso), è giunto il momento di capire quali sono le funzioni per accedere a queste informazioni. Grazie alla scorsa lezione, hai scoperto che WordPress ti mette a disposizione delle funzioni per facilitare il tuo lavoro da sviluppatore, non resta che scoprire quali siano quelle specifiche per la gestione del proprio database.

WordPress basa la sua esistenza sulla presenza di un database, per questo è facile aspettarsi che WordPress ci fornisca un gran numero di funzioni che ti permetteranno di raggiungere questo scopo. Dato che il numero è veramente alto e che molte di queste funzioni sono rivolte agli addetti ai lavori, per il momento ti presento le funzioni che ti permetteranno di richiamare il ciclo WordPress. Il codice che trovi qua in basso sarà veramente molto semplice e dovrai inserirlo all’interno del file index.php che hai creato nella lezione precedente.

Ecco il file index.php in tutta la sua bellezza Puoi notare che ci sono delle funzioni che permettono di includere file (come ad esempio get_header() o get_footer()) mentre altre che permettono di controllare se ci sono degli articoli presenti nel nostro database (have_posts()) ed altre ancora che sono in grado di mostrare alcune delle informazioni che stiamo consultando (come the_title() e the_permalink()).

Insomma, in questo blocco di codice abbiamo veramente visto un sacco di nuove informazioni, credo che elencare e spiegare le più importanti di esse non possa che essere utile al tuo apprendimento ma, se mi sbaglio, dimmelo tranquillamente all’interno dei commenti.

  • : la cosa che ritengo più interessante di tutte, almeno per comprendere la sintassi del linguaggio PHP, è la presenza dei due punti. Questo elemento viene utilizzato per sostituire le parentesi graffe e fornire un feedback al programmatore (in fin dei conti, è molto più comprensibile leggere endwhile o endif al posto di una semplice }, non credi?);
  • have_posts() questa è una fuzione essenziale alla sopravvivenza di uno sviluppatore WordPress. In poche parole, capisce automaticamente il tipo di informazione che vogliamo visualizzare (che sia una homepage, una pagina singola o archivio lei lo sà) e interroga il database alla ricerca dei dati che stiamo cercando. Se riesce a trovarli, restituisce un valore booleano true (per questo sia if che while funzioneranno correttamente), in caso contrario restituirà false e ci permetterà di mostrare un contenuto alternativo che possa spiegare l’inconveniente (grazie ad else che è assente dal codice di esempio)
  • the_post() questa funzione permette di far ricordare a WordPress tutte le informazioni che riguardano l’informazione contenuta all’interno della singola esecuzione di while. Semplicemente, permette a funzioni come the_title() o the_permalink() di richiamare le singole informazioni per l’articolo, come ad esempio il titolo o il link allo stesso.

In tre semplici punti, sei stato in grado di apprendere il funzionamento (anche se base) di un ciclo WordPress, congrats! Quello che è successo sotto al cofano può essere tradotto in questo modo: hai appena chiesto al computer (WordPress) di controllare se all’interno del database erano presenti degli articoli; restituendo il valore true sei stato in grado di spostare la tua attenzione al ciclo while che verrà eseguito finché la funzione have_posts() restituisce un valore true. Adesso, grazie alla funzione the_post(), sei in grado di accedere a tutte le informazioni appartenenti all’articolo e permetterai al ciclo while di passare al successivo.

Mi sembra quasi più semplice il codice…

Servono degli Oggetti

Se hai salvato la pagina index.php e hai provato a visualizzare il risultato (dopo aver installato il tema comunque… Se non sai come muoverti, questa lezione potrebbe esserti utile) dovresti aver notato che all’interno della pagina sono apparsi tutti i titoli degli articoli pubblici all’interno di WordPress. Se ti interessa approfondire questi argomenti, ti consiglio di consultare il corso adeguato perché, a questo punto, quello che voglio farti capire è come chiedere determinate informazioni all’interno del nostro database.

Per fare questo, devo però introdurti al concetto di Programmazione Orientata agli Oggetti in PHP o, come si fa chiamare dagli amici, OOP.

Con questo nuovo acronimo non si intende niente di veramente complicato, anzi, questo nuovo paradigma di programmazione presenta una nuova sintassi che ti aiuterà a mantenere un codice più pulito e ordinato. Facendo leva sulle conoscenze che hai acquisito fino ad ora, quando si parla di oggetti non facciamo mai riferimento a variabili, parametri o funzioni. Benché svolgano una funzione molto simile, gli oggetti hanno delle proprietà (che ti permettono di salvare dei valori) e dei metodi (che ti permettono di svolgere delle operazioni con le proprietà dell’oggetto).

In questo punto della lezione avrei potuto spendere altre mille parole a spiegarti il concetto di oggetto e classe (altro vocabolo molto interessante) ma credo che sia meglio presentarti la più semplice sintassi che potrai utilizzare in WordPress. Avrai sempre modo di approfondire questi concetti in un secondo momento.

Sempre all’interno del file index.php sostituisci il codice del ciclo WordPress che ti ho presentato poco fa ed inserisci al suo posto il codice che trovi qua sotto:

Inserendo questo codice, hai detto a WordPress di consultare il database alla ricerca di articoli che sono salvati nella categoria con ID 3, tutto quello che svolge successivamente, è soltanto mostrare il titolo degli articoli presenti in questa categoria (sempre che tu abbia una categoria con questo ID).

La cosa interessante è che, quella che fino ad ora abbiamo chiamato variabile con questa nuova terminologia prende il nome di oggetto $loop. Se controlli bene, il valore contenuto all’interno di $loop non è il classico valore restituito da una funzione, ma bensì è un nuovo oggetto come testimonia l’utilizzo della parola chiave new.

Oltre a questo, bisogna chiarire che le funzioni have_posts() e the_post()sono anche dei metodi dell’oggetto $loop che svolgono le stesse azioni eseguite per il ciclo che abbiamo incontrato precedentemente. Come sempre il diavolo sta nei dettagli e anche in programmazione sono questi a fare la differenza; osservando la sintassi presentata si può scoprire che questi sono metodi che appartengono all’oggetto $loop (creato grazie alla classe WP_Query()) confermato dalla presenza del simbolo ->.

L’ultima considerazione che vorrei farti fare è che, come per ogni funzione, anche un oggetto può accettare dei parametri che gli permetteranno di modificare la sua configurazione, in questo caso il parametro accettato è un array ma, osservando la pagina dedicata del Codex WordPress, scoprirai facilmente che potrai passare anche un parametro stringa.

Riassumendo:

  • in programmazione, un oggetto non è altro che un sistema per dichiarare qualcosa (ad esempio una macchina) che ha determinate proprietà (colore, cilindrata, anno) e metodi (accensione, consumo carburante, rifornimento) che potranno essere utilizzati all’interno del nostro programma.
  • la dichiarazione di un oggetto si riconosce dall’uso della parola chiave new seguita dal nome della classe che stiamo usando per creare l’oggetto stesso;
  • quando desideri usare un metodo su un particolare oggetto assicurati di utilizzare il dimbolo -> con il nome del tuo oggetto a sinistra mentre il metodo da utilizzare a destra.

Gestisci il Database

Per non caricare troppo questa lezione, affronteremo questo argomento molto velocemente, ma non potevo lasciarlo completamente da parte perché, grazie a $wpdb, sarai veramente in grado di prendere il controllo del tuo database. Per utilizzare bene questa classe dovrai conoscere la sintassi SQL, ma ti basterà veramente una conoscenza minima di questo linguaggio per poter utilizzare i metodi più utili che questa classe ha da offrire.

Questo argomento è ritenuto alquanto avanzato dato che, senza le conoscenze necessarie, risulta veramente difficile da usare. Ma non potevo evitare almeno di menzionare questa classe in una lezione che si chiama Gestisci il Database con WordPress, non mi sembrava semplcemente giusto.

Ecco i metodi più utili per navigare e usare le informazioni contenute nel database:

  • $wpdb->get_var(); – grazie al metodo get_var() ti sarà possibile inserire la tua 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 per andare a prendere delle informazioni presenti nella sua riga;
  • $wpdb->get_col() invece di una riga, con questa puoi usare la tua SQL per selezionare soltanto una colonna.

Queste sono soltanto i metodi più semplici che puoi utilizzare con $wpdb e, se ti ho incuriosito abbastanza, puoi andare sul Codex a scoprire tutti gli altri interessanti metodi che questa classe porta con se.

Conclusioni

Con questa ultima parentesi chiudiamo questa lezione perché, anche se ci sarebbe molto altro da scoprire sugli oggetti, la sintassi che ti ho presentato sarà più che sufficiente per muovere i tuoi primi passi nella programmazione WordPress. Anche in questa lezione, i concetti che hai appreso sono stati davvero molti! Per prima cosa, hai scoperto che esiste un fle PHP che contiene i dati necessari a WordPress per gestire il database (wp-config.php), hai visto quanto sia semplice controllare la presenza di articoli grazie al ciclo WordPress (e ti assicuro che fare una cosa del genere con del puro PHP sarebbe stato assai doloroso).

Non contento di poter utilizzare il ciclo sei andato oltre ed hai conosciuto la classe WP_Query() (definiremo cosa sia una classe più avanti), questa ti permette di personalizzare il ciclo WordPress in qualsiasi modo tu voglia! Ti basterà consultare la pagina del Codex per scoprire in quanti modi è possibile personalizzare un ciclo.

Ma per poter utilizzare le sue potenzialità hai dovuto apprendere, seppur spiegato velocemente, che cosa sia un oggetto e come utilizzare i suoi metodi. Spero che non ci sia niente di complicato in questa lezione ma, se dovessi sbagliarmi, ci tengo a farti sapere che la sezione dei commenti aspetta soltanto il tuo contributo.

Esercizi

Come ormai ti sarai abituato, anche questa lezione contiene qualche esercizio che ti voglio proporre, anche se devo dirti che niente migliora le tue capacità da sviluppatore come lavorare ad un vero progetto. Lasciando da parte queste considerazioni, ecco qualche idea con cui potresti far pratica:

  1. per prima cosa vorrei sapere i tipi di valori contenuti all’interno delle colonne ID, post_excerpt, post_author e post_date della tabella wp_posts; (se non vuoi controllare il tuo database, ricorda che c’è una immagine ad inizio lezione);
  2. quali sono i valori che WordPress ha bisogno di conoscere per gestire il database? Saresti in grado di trovarli? Se si, come?
  3. la prima volta che ti ho presentato il ciclo WordPress, ti ho detto che se non è in grado di trovare alcun articolo all’interno del database, la condizione if si conclude. Ora, dovresti fare in modo di modificare questo codice e mostrare <p>Spiacente, nessun articolo da visualizzare.</p> se il ciclo non è in grado di visualizzare alcun articolo; (ricorda che nella lezione Condizioni e Cicli hai tutto quello che ti serve per risolvere questo esercizio)
  4. quello che dovresti fare ora è modificare i parametri che passerai alla classe WP_Query() per mostrare:
    1. tutti gli articoli all’interno della categoria con nome Senza Categoria;
    2. mostrare un numero massimo di 15 articoli per pagina;
    3. mostrare soltanto gli articoli dell’autore che ha ID 1.

Per risolvere questi ultimi esercizi, dovrai consultare attentamente la pagina del Codex che ti spiegherà come modificare l’array contenuto nella variabile $args.

Lascia il tuo Pensiero