WordPress: creare un plugin object-oriented (orientato agli oggetti)

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();
Torna su