WordPress non è costituito da solo codice procedurale, ma presenta molte caratteristiche object-oriented. Nulla ci vieta di scrivere i nostri widget e plugin utilizzando un approccio OOP. I benefici sono quelli già citati altrove: scalabilità, portabilità e riusabilità del codice. A questi aggiungerei anche una maggiore chiarezza e leggibilità in fase di sviluppo. In questo articolo vedremo come creare un semplice plugin object-oriented.
Descrizione e metadati
Il nostro plugin dovrà visualizzare gli ultimi tweet di un utente nella colonna laterale tramite uno shortcode. Il nostro codice inizierà appunto con i metadati del plugin:
/*
Plugin Name: TwitterFeed
Plugin URI: https://gabrieleromanato.com/
Description: Mostra gli ultimi tweet nella colonna laterale
Version: 1.0
Author: Gabriele Romanato
Author URI: https://gabrieleromanato.com/
*/
Definire la classe
Definiamo la nostra classe come segue:
class TwitterFeed
{
}
Definire il costruttore
All'interno del metodo TwitterFeed::__construct()
andremo ad inizializzare la nostra classe, definendo il percorso del plugin, registrando gli script e i file CSS necessari e creando uno shortcode:
public function __construct()
{
// imposta il percorso del plugin
$this->pluginUrl = WP_PLUGIN_URL . '/twitterfeed';
// imposta lo shortcode
add_shortcode('twitterfeed', array($this, 'shortcode'));
// importa gli script
wp_enqueue_script('twitterfeed-script', $this->pluginUrl . '/js/jquery.twitterfeed.min.js', array( 'jquery' ));
// importa gli stili CSS
wp_enqueue_style('twitterfeed-style', $this->pluginUrl . '/css/style.css');
}
Notiamo che la funzione add_shortcode
nel caso delle classi accetta come secondo parametro un array contenente un riferimento alla classe corrente ($this
) e il nome del metodo della classe che definirà lo shortcode.
I metodi della classe
Due sono i metodi della nostra classe: uno serve a lanciare il codice jQuery e l'altro gestisce lo shortcode:
public function loadTweets($user, $limit)
{
// crea l'elemento HTML di destinazione
echo '<div id="tweets"></div>';
// usa il plugin jQuery
$js = '<script type="text/javascript">jQuery(function(){jQuery("#tweets").twitterFeed({username: "' . $user . '", limit: ' . $limit . '});});</script>';
echo $js;
}
// shortcode
public function shortcode($data)
{
return $this->loadTweets($data['username'], $data['limit']);
}
Lanciare il plugin
Per lanciare il plugin dobbiamo solo creare un'istanza della nostra classe:
// lancia il plugin
$twitterFeed = new TwitterFeed();
Uso del plugin
[twitterfeed username="gabromanato" limit="3"]
Il codice completo
/*
Plugin Name: TwitterFeed
Plugin URI: https://gabrieleromanato.com/
Description: Mostra gli ultimi tweet nella colonna laterale
Version: 1.0
Author: Gabriele Romanato
Author URI: https://gabrieleromanato.com/
*/
class TwitterFeed
{
public function __construct()
{
// imposta il percorso del plugin
$this->pluginUrl = WP_PLUGIN_URL . '/twitterfeed';
// imposta lo shortcode
add_shortcode('twitterfeed', array($this, 'shortcode'));
// importa gli script
wp_enqueue_script('twitterfeed-script', $this->pluginUrl . '/js/jquery.twitterfeed.min.js', array( 'jquery' ));
// importa gli stili CSS
wp_enqueue_style('twitterfeed-style', $this->pluginUrl . '/css/style.css');
}
public function loadTweets($user, $limit)
{
// crea l'elemento HTML di destinazione
echo '<div id="tweets"></div>';
// usa il plugin jQuery
$js = '<script type="text/javascript">jQuery(function(){jQuery("#tweets").twitterFeed({username: "' . $user . '", limit: ' . $limit . '});});</script>';
echo $js;
}
// shortcode
public function shortcode($data)
{
return $this->loadTweets($data['username'], $data['limit']);
}
}
// lancia il plugin
$twitterFeed = new TwitterFeed();