WordPress: per un approccio object-oriented nella gestione del codice

Un esempio pratico su come usare un approccio object-oriented nella gestione del codice di WordPress.

Quasi tutti i temi di WordPress che ho visto sinora trattano le pagine dei contatti e i form dei contatti nel modo sbagliato. Mi spiego: essi tendono ad inserire le procedure di validazione del form e l’invio e-mail direttamente nel template della pagina. In realtà, il template della pagina dovrebbe essere il più snello possibile, evitando quello che a buon diritto può essere considerato come “spaghetti code”. PHP 5 dispone di potenti funzionalità orientate agli oggetti, quindi seguiremo un approccio OOP per separare la logica dalla struttura in un form di contatti.

La classe dei contatti

La seguente classe Contact svolge due compiti:

  1. valida i dati
  2. invia l’e-mail

Ecco il suo codice:

La classe ha un metodo pubblico, Contact::output(), e una proprietà pubblica, Contact::message. Il metodo serve appunto a visualizzare il messaggio destinato all’utente, che può essere sia un messaggio di conferma dell’avvenuto invio dell’e-mail sia una lista di errori di validazione.

Potete inserire il codice della classe in un file che chiamerete NomeTemaContact.php e che andrete ad inserire in una directory apposita all’interno del vostro tema (per esempio includes o scripts).

Usare la classe dei contatti

Quindi dovete includere la classe nel vostro template della pagina contatti. Usate il seguente codice all’inizio del file:

A questo punto dovete intercettare l’invio del form. Assegnate un attributo name all’elemento input di tipo submit del form e quindi inserite il seguente codice nel punto del template in cui volete che compaia l’output della classe Contact:

Come potete notare, abbiamo evitato di inquinare il template della pagina con del codice che invece può essere inserito in una classe apposita.

Nota finale

La marcatura generata dal metodo pubblico della classe può anche essere gestita con l’uso di un sistema di template (per esempio tramite file PHTML). Consiglio questo approccio quando ci si trova a dover gestire considerevoli quantità di contenuti HTML.