Nella scorsa lezione hai imparato molto; hai scoperto quale sia la struttura delle informazioni all’interno di un database e grazie a WordPress hai anche imparato a inviare le tue query SQL e ottenere in risposta degli elementi facili da consultare.
Un’altra cosa che è accaduta all’interno della lezione è stato il tuo primo incontro con una sintassi specifica per la programmazione orientata agli oggetti e ti ho fatto utilizzare il simbolo ->
senza spiegazioni dicendo soltanto che ti permette di accedere alle proprietà e ai metodi di un oggetto.
In questa il mio intento è quello di presentarti la struttura di questi elementi e come sia possibile crearli per poi passare nel dettaglio e scoprire da vicino alcuni degli oggetti che WordPress ci mette a disposizione e come possono aiutarci nello sviluppo.
Riconosco che forse stiamo correndo un po’ troppo e in un corso PHP generalmente non si salta così velocemente dalla dichiarazione di una variabile alla possibilità di utilizzare gli oggetti, ma dato il nostro approccio nei confronti di WordPress questa velocità è essenziale perché stiamo imparando a programmare all’interno di una applicazione web molto complessa che sfrutta molte soluzioni intelligenti e utili.
Spero di fare un buon lavoro con questo approccio, ma come sempre ti ricordo che se ti sei perso per la strada perché qualche mia spiegazione non è stata abbastanza dettagliata ti invito a utilizzare il nostro forum dove potrai chiedere aiuto a me e agli altri skillati che frequentano questa community.
Cosa significa programmazione a oggetti
Il paradigma di programmazione a oggetti viene preferito rispetto alla programmazione funzionale (quella che hai utilizzato fino a ora con la dichiarazione di variabili e funzioni) quando dobbiamo lavorare all’interno di progetti complessi che si trovano a dover gestire una grande mole di informazioni.
Se ci pensi un attimo, un CMS come WordPress si trova a dover gestire informazioni come i tuoi articoli, gli utenti, i commenti, i redirect, il caricamento delle opzioni, il caricamento dei temi, il codice personalizzato…
Insomma, senza neanche dover disturbare i suoi plugin, WordPress ha molte informazioni che deve tenere in considerazione ogni volta che un utente lo carica all’interno del suo browser.
La programmazione a oggetti è molto utile in questi contesti perché permette di sviluppare un codice che può essere realizzato in maniera collaborativa ed è molto più semplice da spostare in diversi progetti grazie alla sua caratteristica modulare.
Ma prendiamo un momento il toro per le corna e cerchiamo di capire che cosa sia la programmazione orientata agli oggetti.
Se non è la prima volta che ne senti parlare molto probabilmente hai anche sentito il termine classe che veniva utilizzato in maniera interscambiabile a oggetto; purtroppo per quanto questi due elementi dipendano l’uno dall’altro sono completamente diversi tra loro.
Prima di proseguire ti consiglio di creare una nuova cartella lezione8/
nel tuo server web (esterna all’installazione WordPress usata nella scorsa lezione) e di creare al suo interno il file index.php
perché sarà molto utile per provare gli esempi che andremo a discutere. In questo file inserisci il seguente codice:
<?php //Dichiarazione della classe ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>La programmazione a oggetti</title> </head> <body> <h1>La programmazione a oggetti</h1> <?php //Utilizzo della classe per creare oggetti ?> </body> </html>
A livello teorico una classe può essere paragonata al progetto di una casa, macchina, seggiola… mentre un oggetto è la casa, macchina o seggiola creata partendo appunto dalla classe.
Grazie alla classe sappiamo quali sono le caratteristiche dell’oggetto che dobbiamo sviluppare, ma come succede proprio nel mondo reale ogni oggetto è un’entità distinta anche se figlio della stessa classe.
Visto che questo è un corso dedicato al PHP con un punto di riguardo nei confronti di WordPress possiamo dire tranquillamente che ogni articolo è un oggetto.
Tutti hanno un titolo, un contenuto, un autore, una data di pubblicazione e altri elementi caratteristici; ma ogni articolo è unico proprio in base ai valori che questi elementi contengono.
Dato che ritengo che tu sia molto confidente con questo tipo di elemento, durante questa sezione teorica andremo a ricreare, seppur marginalmente, i componenti della classe WP_Post
che per tua curiosità potrai trovare all’interno di wp-includes/class-wp-post.php
in qualsiasi installazione WordPress.
La dichiarazione di una classe
Partiamo intanto dal capire come sia possibile dichiarare una classe, apri quindi il file index.php
nel tuo editor di testo preferito e all’interno della sezione //Dichiarazione della classe
inserisci quanto segue:
class WP_Post{ }
Proprio come succede per le funzioni, anche le classi hanno una sorta di doppia vita.
Da una parte abbiamo la possibilità di dichiararle, come successo con l’esempio precedente mentre dall’altra abbiamo l’opportunità di eseguirla o per dirla in termini a oggetti: abbiamo la possibilità di inizializzare l’oggetto.
Con il termine inizializzazione si intende la possibilità di dar vita al nostro oggetto seguendo le istruzioni che sono state definite dalla classe stessa.
Senza saperlo anche tu hai già inizializzato un oggetto e questo è successo nella scorsa lezione quando abbiamo creato un loop personalizzato grazie alla classe WP_Query
e alla parola chiave new
, la parola che ci permette a dire all’interprete PHP che la nostra intenzione è salvare all’interno della variabile l’oggetto che stiamo inizializzando.
Ma al momento non stiamo analizzando l’inizializzazione di un oggetto ma piuttosto la dichiarazione di una classe.
Come puoi notare la sintassi è abbastanza simile, le uniche cose che cambiano sono le parentesi tonde che in una classe servono per passare i parametri e l’utilizzo della parola chiave class
al posto di function
.
Anche se siamo ben lontani dal comprendere come si programma a oggetti puoi prenderti un momento per congratularti con te stesso perché hai appena dichiarato la tua prima classe.
Però se sei tornato con la memoria alla lezione precedente e nello specifico al momento in cui hai inizializzato l’oggetto WP_Query
ti sarai ricordato che per farlo abbiamo usato delle parentesi tonde per passare i parametri da usare per l’inizializzazione. Forse adesso ti stai chiedendo come sia possibile passare i parametri a una classe.
Ebbene questo è possibile grazie a una caratteristica interna delle classi che prende il nome di metodo costruttore, ovvero un metodo molto particolare che viene richiamato automaticamente quando stiamo inizializzando un oggetto con la parola chiave new
.
Variabili, proprietà, funzioni e metodi
Ho appena introdotto un altro termine che hai già sentito ma che al tempo stesso non ho mai spiegato nel dettaglio, ecco perché ho creato questa nuova sezione; per dare un significato a questi nuovi termini.
Fino a ora hai conosciuto le variabili e le funzioni che si sono dimostrati elementi molto potenti che ci hanno permesso di muovere i primi passi all’interno della programmazione, ma quando si tratta di sviluppo orientato agli oggetti bisogna prendere dimestichezza anche con un nuovo vocabolario.
Ti ho detto che una classe è un progetto mentre l’oggetto è la cosa che possiamo realizzare partendo da esso, la cosa che ancora non abbiamo analizzato è la presenza di altri elementi che definiscono la struttura di questi oggetti.
Infatti ogni oggetto presenta delle caratteristiche che lo rendono unico e che allo stesso tempo rispondono a un progetto ben definito.
Prendiamo in esame l’oggetto macchina. (Quasi) Ogni oggetto di questo tipo ha quattro ruote, un colore della carrozzeria, una capienza del bagagliaio e una serie di altri elementi che permettono di identificarlo.
Se dovessimo descrivere questo oggetto all’interno della programmazione funzionale avremmo inserito questi valori all’interno di variabili, quando si programma a oggetti questi valori vengono salvati all’interno delle proprietà che presentano una sintassi simile alle variabili ma dato che sono presenti all’interno di una classe vengono identificate con questo nuovo termine.
Allo stesso tempo un oggetto può avere delle azioni che modificano lo stato delle proprietà che lo descrivono.
Analizzando nuovamente l’oggetto macchina possiamo dire che ha la possibilità di accelerare, consumare carburante, cambiare colore della carrozzeria ecc…
Tornando ad analizzare la programmazione funzionale potremmo dire che queste attività vengono descritte benissimo dalle funzioni, ma dato che stiamo sviluppando a oggetti anche queste cambiano nome in metodi.
In entrambi i casi la sintassi per dichiarare queste nuove strutture è molto simile ma era necessario fare questa piccola introduzione perché d’ora in avanti farò riferimento a questi termini senza altri approfondimenti.
Lasciamo da parte per il momento la macchina che abbiamo analizzato e torniamo a parlare degli articoli che WordPress utilizza. Parlando di proprietà possiamo tranquillamente dire che un articolo può avere un titolo, un contenuto e uno stato di pubblicazione.
Quando parliamo invece di metodi, a parte il costruttore che abbiamo anticipato nella sezione precedente, possiamo dire che WordPress avrà bisogno di un metodo che gli permette di interrogare il database per poter ottenere le informazioni relative all’articolo che sta cercando.
Adesso che abbiamo definito le proprietà e i metodi base della nostra classe è giunto il momento di scoprire come sia possibile dichiararli.
/** * The post's title. * * @var string */ public $post_title = ''; /** * The post's content. * * @var string */ public $post_content = ''; /** * The post's status. * * @var string */ public $post_status = 'publish';
Come puoi vedere i commenti che ti ho presentato qualche lezione fa tornano più che mai utili e anche se non ti ho ancora descritto il significato della parola chiave @var
sono convinto che hai già capito a che cosa serve.
Praticamente aiuterà il generatore di documentazione a descrivere il tipo di valore che viene salvato all’interno della proprietà dichiarata.
La sintassi che hai visto nell’esempio precedente è molto simile a una classica dichiarazione di una variabile se non fosse per la parola chiave public
.
Io ho inserito questo elemento per completezza delle informazioni ma l’unica cosa che ti voglio dire a riguardo è che all’interno delle classi possiamo definire la visibilità di proprietà e metodi andando a gestire il livello di accesso che questi possono offrire nel nostro codice.
Ho deciso di trattare con una singola frase l’argomento della visibilità perché in WordPress non c’è bisogno di conoscere questa caratteristica, se l’argomento ti interessa ti consiglio di partecipare all’interno del forum e chiedere maggiori chiarimenti; mi potresti anche convincere a creare un nuovo corso dedicato alla programmazione a oggetti in PHP 😉
Hai appena scoperto come sia possibile dichiarare le proprietà all’interno di una classe, quello che mancano adesso sono i metodi descritti precedentemente:
/** * Constructor. * * @param WP_Post|object $post Post object. */ public function __construct( $post ) { //Costruisco l'oggetto } /** * Retrieve WP_Post instance. * * @access public * * @global wpdb $wpdb WordPress database abstraction object. * * @param int $post_id Post ID. * @return WP_Post|false Post object, false otherwise. */ public function get_instance( $post_id ) { global $wpdb; //Interrogo il database per ottenere le informazioni }
Ed ecco che adesso abbiamo creato la nostra prima classe. Come puoi notare tu stesso non ho completato il metodo ma la sintassi che stai vedendo, a parte le parole chiave public
, è veramente molto simile alla dichiarazione di una funzione! Anzi non è neanche cambiata la parola chiave.
Anche se non completa, spero che questa introduzione alla creazione di una classe ti abbia aiutato a capire che, quando si programma a oggetti, è importante conoscere le possibilità messe a disposizione dalla classe che li descrivono; perché è proprio grazie a queste che ci vengono forniti i vari metodi e proprietà con i quali possiamo interagire con i valori contenuti.
Abbiamo avuto già una dimostrazione di questo quando abbiamo usato la classe WP_Query
nella scorsa lezione per istanziare un oggetto con gli articoli appartenenti alla categoria pippo; per questo motivo andremo a scoprire come sia possibile inizializzare un oggetto e accedere alle sue proprietà e metodi proprio con questa.
Gli oggetti che possiamo usare con WordPress
Fino a ora abbiamo parlato della teoria delle classi e abbiamo descritto come poter dichiarare proprietà e metodi al loro interno, ma quando si utilizzano CMS come WordPress molto spesso ci troviamo a disposizione una serie di oggetti che ci facilitano il compito.
Negli esempi precedenti abbiamo realizzato una semplice classe WP_Post
che risulta essere molto più complessa se vai a studiare la sua dichiarazione all’interno del core WordPress, ma quello che faremo adesso è scoprire come sia possibile inizializzare un oggetto WP_Query
che rappresenta la possibilità offerta da questa piattaforma per interrogare il database e restituire una serie di articoli che corrispondono alla richiesta effettuata .
Ed ecco che, proprio come ti annunciavo nella scorsa lezione, WordPress è in grado di fornire una serie di strumenti che ci aiutano a interrogare il database; in questo esempio parleremo di WP_Query
ma ti anticipo che ne esistono alcune per consultare le Meta API, i commenti, gli utenti e addirittura una che ci consente di gestire e di conoscere le regole di rewrite dei nostri permalink.
Insomma, WordPress offre veramente molto per aiutarci a interrogare il database senza dover conoscere la sintassi SQL ed è per questo motivo che in questa sezione ho deciso di mostrarti come sia possibile inizializzare un oggetto, perché queste soluzioni sono state scritte rispettando questo paradigma e ti troverai molto spesso a confrontarti con loro.
Cerchiamo quindi di capire per prima cosa come si inizializza un oggetto WP_Query
:
/** * La query personalizzata per il loop * * @var object */ $new_loop = new WP_Query( $args );
Hai già conosciuto la parola chiave new
come quella che permette di dire al nostro interprete PHP che vogliamo inizializzare un oggetto della classe specificata; la classe si specifica immediatamente dopo questa e si utilizzano le parentesi tonde per passare i parametri che verranno utilizzati dal costruttore.
Una volta creato l’oggetto questo verrà salvato all’interno della variabile $new_loop
, almeno nel nostro esempio, e potrà essere utilizzata successivamente per richiamare su di essa le proprietà e i metodi appartenenti all’oggetto.
Precedentemente abbiamo parlato del costruttore come quel metodo che viene chiamato in automatico durante l’inizializzazione di un oggetto, dato che la classe WP_Query
ci permette di interrogare il database restituendo dei loop personalizzati per applicare queste personalizzazioni ha bisogno di conoscere i parametri di cui abbiamo bisogno.
Questi possono essere passati al costruttore durante l’inizializzazione dell’oggetto grazie al parametro $args
che, come scoperto nella scorsa lezione, è rappresentato da un array associativo.
/** * La configurazione del loop * * @var array */ $args = array( 'post_type' => 'post', 'posts_per_page' => 6, 'cat' => 1 );
Nei nostri esempi salviamo l’array all’interno della variabile $args
ma lo facciamo soltanto per rispettare gli standard WordPress, se stai scrivendo un codice che non vedrà mai nessuno puoi anche creare variabili chiamate $ciclo
, $pippo
o $paperino
; l’importante è che usi queste quando vai a inizializzare l’oggetto 🙂
Se vuoi scoprire quali sono i parametri di configurazione che puoi utilizzare ti consiglio di consultare la pagina dedicata del Codex WordPress perché sono veramente molti, nel nostro esempi abbiamo usato i più comuni che assumono questo significato:
post_type
– una classica installazione WordPress porta con se diversi post type tra i quali ipost
(articoli),page
(pagine),attachment
(immagini e media collegati all’articolo) erevision
(le revisioni di articoli e pagine). È sempre bene specificare il tipo di post che vogliamo ottenere dalla nostra query e in questo esempio abbiamo scelto il classico articolo.posts_per_page
– immagino che tu sappia che all’interno delle impostazioni di WordPress hai la possibilità di selezionare quanti articoli mostrare in una classica pagina di archivio. Ebbene grazie a questo parametro potremo sovrascrivere questa impostazione e scegliere quanti articoli mostrare all’interno del nostro loop personalizzato.cat
– nella scorsa lezione hai conosciuto il parametrocategory_name
dove hai potuto specificare il nome della categoriapippo
mentre adesso ti presento un parametro differente che prende come valore un numero intero che specifica l’ID della categoria di nostro interesse.
A questo punto hai creato il tuo primo oggetto WP_Query
, per la buona riuscita di questi esperimenti ti consiglio di aggiungere questo codice all’interno del file index.php
presente nella cartella twentysixteen
di una installazione WordPress; praticamente lo stesso file della lezione precedente.
Nella terza lezione di questo corso ti ho presentato le funzioni echo
, var_dump()
e print_r()
come interessanti soluzioni per scoprire i valori contenuti nelle variabili; le ultime due si sono rivelate anche molto interessanti per quanto riguarda scoprire la struttura degli array ma sono anche molto utili per quanto riguarda scoprire i valori contenuti all’interno di un oggetto.
Adesso che hai creato il tuo primo oggetto WP_Query
prima di andare a consultarlo all’interno del loop WordPress è bene scoprire che cosa si cela al suo interno, per questo motivo andiamo a fare un bel print_r()
che ci permetterà di leggere più facilmente il suo contenuto.
WP_Query Object
(
[query] => Array
(
[post_type] => post
[posts_per_page] => 6
[cat] => 1
)
[query_vars] => Array( /* Variabili di default della query */ )
[tax_query] => WP_Tax_Query Object( /* Informazioni sulle tassonomie */ )
[meta_query] => WP_Meta_Query Object( /* Informazioni sulle meta */ )
[request] => SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id IN (1) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 6
[posts] => Array
(
[0] => WP_Post Object
(
[ID] => 332
=> 1
=> 2016-04-07 14:21:55
[post_date_gmt] => 2016-04-07 14:21:55
[post_content] => http://www.youtube.com/watch?v=yWYHHNADK04
[post_title] => Articolo di Test
[post_status] => publish
[comment_status] => open
[ping_status] => open
[post_name] => articolo-di-test
[post_modified] => 2016-04-07 14:24:57
[post_modified_gmt] => 2016-04-07 14:24:57
[post_parent] => 0
[guid] => http://local.wordpress.dev/?p=332
[menu_order] => 0
[post_type] => post
[comment_count] => 0
[filter] => raw
)
[1] => WP_Post Object
(
[ID] => 1
...
)
)
)Anche se ho cercato di semplificare l’output di print_r( $new_loop )
riconosco che le informazioni fornite sono veramente molte, ma il fatto è proprio che a ogni query le informazioni ottenute sono veramente tante!
Ti ho lasciato alcune informazioni, come quelle presenti all’interno della proprietà query
per mostrarti che all’interno delle proprietà di un oggetto possono essere presenti singoli valori, array o addirittura altri oggetti.
Puoi riscontrare quanto detto da query_vars
dichiarato come Array e da tax_query
e meta_query
che sono rispettivamente oggetti della classe WP_Tax_Query
e WP_Meta_Query
; ma puoi anche vedere la stessaquery SQL utilizzata che si trova all’interno della proprietà request
.
Adesso che trovare questi tipi di valori all’interno delle proprietà di un oggetto non dovrebbe più scatenare tanto stupore, ti chiedo di analizzare la proprietà posts
che trovi anche nel seguente blocco di codice in una forma semplificata.
[posts] => Array
(
[0] => WP_Post Object
(
[ID] => 332
=> 1
=> 2016-04-07 14:21:55
[post_date_gmt] => 2016-04-07 14:21:55
[post_content] => http://www.youtube.com/watch?v=yWYHHNADK04
[post_title] => Articolo di Test
[post_status] => publish
[comment_status] => open
[ping_status] => open
[post_name] => articolo-di-test
[post_modified] => 2016-04-07 14:24:57
[post_modified_gmt] => 2016-04-07 14:24:57
[post_parent] => 0
[guid] => http://local.wordpress.dev/?p=332
[menu_order] => 0
[post_type] => post
[comment_count] => 0
[filter] => raw
)
[1] => WP_Post Object
(
[ID] => 1
...
)
)Quello che ho cercato di mostrarti con il recente blocco di codice è che all’interno della proprietà posts
sono contenuti tutti gli articoli raccolti dalla query personalizzata. posts
è rappresentato come un array ma all’interno di ogni suo indice (numerico) è presente un oggetto WP_Post
che contiene le informazioni dell’articolo nelle varie proprietà (puoi trovare le proprietà $post_title
, $post_content
e $post_status
che avevamo creato precedentemente quando abbiamo dichiarato la nostra classe WP_Post
).
A questo punto non resta altro che trovare un modo per accedere ai singoli valori e mostrarli all’interno di una pagina. Diciamo che voglio mostrare il titolo degli articoli trovati con la mia query, con le nostre conoscenze potremmo scrivere qualcosa del genere:
/** * Inserisco i dati degli articoli trovati * * @var array */ $posts = $new_loop->posts; /** * Ciclo all'interno dei post e mostro il titolo */ foreach ( $posts as $post ) { echo "<h1>" . $post->post_title . "</h1>"; }
Come puoi notare tu stesso il codice che ti ho appena presentato non risulta essere molto nuovo, in fin dei conti non facciamo altro che creare una nuova variabile e utilizzare un ciclo foreach
per ottenere accesso ai parametri degli oggetti contenuti nell’array.
Se dobbiamo essere precisi c’è un carattere con il quale non hai ancora molta dimistichezze, ed è il carattere ->
che come detto all’inizio di questa lezione ti permette di accedere alle proprietà e metodi di uno specifico oggetto.
In questo contesto abbiamo sfruttato l’output di print_r()
per scoprire quale sia la struttura dell’oggetto, quali sono le proprietà in esso contenute, e abbiamo sfruttato questa caratteristica per garantirci l’accesso alla proprietà post_title
.
Come puoi vedere tu stesso, l’interprete PHP ha bisogno di conoscere il riferimento all’oggetto in questione e lo facciamo inserendo la variabile contenente l’oggetto, nel nostro caso $post
alla sinistra del carattere ->
.
In questo modo siamo riusciti a mostrare i titoli dei nostri articoli, ma al tempo stesso abbiamo usato del codice nostro.
Faccio questo riferimento perché quando si lavora all’interno di WordPress, o di altri CMS, spesso abbiamo a disposizione delle funzioni che ci permettono di facilitarci il lavoro senza la necessità di conoscere da vicino la struttura dell’oggetto che stiamo utilizzando.
In questo caso specifico sto facendo riferimento al loop di WordPress che ci facilita enormente le possibilità di interagire con i dati che abbiamo ottenuto dalla nostra query personalizzata.
if( $new_loop->have_posts() ){ while( $new_loop->have_posts() ){ $new_loop->the_post(); //Mostro le informazioni del nuovo loop } }
Hai già visto questo codice nella scorsa lezione ma non lo abbiamo mai analizzato da vicino.
Adesso che invece conosci il risultato della nostra query dovrebbe essere più naturale comprendere che have_posts()
e the_post()
sono due metodi della classe WP_Query
; il primo ci aiuta a capire se ci sono altri articoli da mostrare e nel caso affermativo ci permette di analizzare il successivo al successivo giro di while
, mentre il secondo ci offre una serie di funzioni che semplificano ulteriormente la nostra sintassi.
if( $new_loop->have_posts() ){ while( $new_loop->have_posts() ){ $new_loop->the_post(); //Mostro le informazioni del nuovo loop ?> <h1><?php the_title(); ?></h1> <div class="content"><?php the_content(); ?></div> <?php } }
Una volta dentro al loop potrai chiudere tranquillamente il codice PHP, sempre per riaprirlo una volta terminata la struttura HTML, e utilizzare le funzioni the_title()
e the_content()
che si occuperanno di mostrare automaticamente il titolo e il contenuto presenti all’interno dell’articolo attualmente consultato.
Sono sicuro che ti sarà molto più semplice ricordarti le funzioni dedicate a ottenere le informazioni contenute all’interno di un oggetto WP_Post
piuttosto che la sua struttura, inoltre così facendo starai rispettando gli standard WordPress e potrai beneficiare di molte altre utility che ti verranno messe a disposizione.
Conclusione
Sei nuovamente giunto al termine di una lezione ricca di contenuti e spunti interessanti, come dicevo all’inizio, purtroppo con una singola lezione non possiamo andare a scoprire nel dettaglio come sia possibile sviluppare a oggetti con il PHP ma spero che l’infarinatura che ti ho dato all’interno di questa lezione sia sufficiente per permetterti di sviluppare con WordPress nel migliore dei modi.
Data la forma ibrida che ho voluto dare a questo corso non sono stato in grado di entrare nel dettaglio per quanto riguarda la programmazione in WordPress ma ti posso assicurare che il Codex sarà un tuo grande amico e, se proprio non vuoi leggere la documentazione in inglese, ti ricordo che il nostro forum è a tua completa disposizione!
Adesso è giunto il momento di scoprire se le informazioni contenute in questa lezione sono state di tuo gradimento e se hai imparato qualcosa da queste, non ti resta altro che rispondere alle domande che ti ho preparato e passare alla lezione successiva dove scopriremo ancora qualcosa di nuovo che riguarda sia il linguaggio PHP che WordPress.