WordPress come scrivere un plugin per nuove funzionalità
da Massimo Della Rovere · pubblicato il 14 Maggio, 2014 · modificato il 5 Giugno, 2017

WordPress è un CMS (sistema per la gestione di contenuti) scritto in PHP e utilizza un database MySQL per la memorizzazione delle informazioni. Può essere considerato anche un framework PHP visto il numero elevato di funzioni messe a disposizione. Una delle sue tante caratteristiche che lo hanno portato alla popolarità è la possibilità di aggiungere delle nuove funzioni alla versione standard in maniera semplice e con delle operazioni molto veloci per l’utente che le desidera aggiungere o rimuovere.

WordPress plugin

Queste funzionalità vengono chiamate “plugins” proprio per indicare un nuovo innesco da aggiungere a qualcosa di esistente. Un’altra caratteristicha molto positiva di questi componenti è che se sviluppati bene secondo gli standard non sono release dipendenti, quindi una volta scritti possono funzionare per parecchio tempo senza manutenzione, anche se il core di wordpress viene continuamente aggiornato. Esistono sia plugins gratuiti che a pagamento, normalmente i primi li trovate nel repository ufficiale mentre gli altri nei portali specializzati, quindi ricordatevi che se volete scrivere un plugin e pubblicarlo su wordpress.org lo dovete per forza rilasciare sotto licenza GPL.

Introduzione

Durante una semplice richiesta di elaborazione da parte di wordpress gli elementi che concorrono ad un risultato sono diversi, abbiamo il core, il database, i plugin, i temi ed altre piccole cose. Ognuno di essi è collocato in un posto ben specifico nell’albero delle directory che compongono la nostra installazione. Quindi anche i plugin che dovremmo sviluppare vanno collocati in un posto ben definito per essere eseguiti, modificati e messi sotto debug durante tutta la fase di sviluppo e prima della pubblicazione.

WordPress Plugin

Normalmente i plugin vanno memorizzati in una directory che porta il loro nome nella locazione wp-content/plugins/ e all’interno di questa directory ci devono essere dei file obbligatori che vedremo più tardi. Ovviamente potremmo anche aggiungere una serie di file necessari alla funzionalità che stiamo sviluppando, ad esempio classi PHP esterne, file CSS, immagini, componenti javascript, traduzioni, etc, etc.

Creazione

Adesso che abbiamo capito dove inserire il nostro primo plugin possiamo creare una cartella vuota con il nome del plugin e vedere i primi file da inserire al suo interno. Nel nostro esempio possiamo chiamare il plugin “My Plugin” e quindi creare una nuova cartella denominata “my-plugin/” nel folder di wordpress wp-content/plugins/.

I file da aggiungere obbligatoriamente nella nostra cartella sono un file PHP con lo stesso nome della cartella,  quindi “my-plugin.php“, il quale in linea teorica potrebbe contenere tutto il codice necessario al plugin, un file chiamato readme.txt che deve contenere delle informazioni come il nome, la versione, la descrizione e molte altre sezioni che verranno utilizzate nella fase di pubblicazione sul repository.

WordPress Plugin

Ci sono anche una serie di file “opzionali” ma raccomandati che possiamo inserire nella nostra cartella, ad esempio il file “uninstall.php” verrà richiamato da wordpress durante la fase di disinstallazione del plugin, potrebbe essere utile per cancellare opzioni di configurazione, tabelle MySQL create dal plugin, etc, etc. Io consiglio sempre anche di aggiungere un file vuoto “index.php” per non permettere il listing della directory.

A questo punto possiamo passare a vedere il contenuto dei due file obbligatori e vedere le prime informazioni che vanno inserite: nel file “my-plugin.php” dobbiamo inserire una sezione di commenti con dei campi particolari che saranno letti da wordpress per elencare le caratteristiche del nostro plugin nella sezione di amministrazione:

/*
Plugin Name: My Plugin
Plugin URI: https://emarket.pe/it/
Description: Plugin usato come demo del post
Author: Massimo Della Rovere
Version: 1.0.0
Author URI: https://plus.google.com/106567288702045182616
License: GPLv2 or later
Copyright 2012-2014 eMarket (email: mail@domain.com)
*/

if (!defined('ABSPATH')) die("Accesso diretto al file non permesso");

Nel file “readme.txt” dobbiamo riportare delle informazioni simili ma con un formato diverso che verranno utilizzate quando decideremo di pubblicare il plugin nel repository ufficiale di wordpress.org, per il momento inseriamo solo la prima parte, se volete vedere un esempio completo visionate il file WordPress README.

=== My Plugin for WordPress ===
Contributors: authorname
Requires at least: 3.5
Tested up to: 3.8
Stable tag: 1.0.0
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: demo, plugin, developer
Plugin for demo post.
== Description ==
Una descrizione che sarà utilizzata nel repository ufficiale.

Anche se adesso il plugin non esegue ancora nessuna funzione particolare, ci conviene controllare se viene riconosciuto correttamente da wordpress, possiamo anche provare ad attivarlo e disattivarlo e controllare di non ricevere errori di nessuna natura. Quindi andiamo nel pannello di amministrazione nel menu “plugin” e controlliamo:

WordPress Plugin

Implementazione

Prima di scrivere le funzionalità da aggiungere al nostro plugin bisogna prevedere due azioni ben precise, quella di attivazione e quella di disattivazione del plugin stesso, infatti potrebbero esserci delle informazioni che dobbiamo creare in fase di attivazione ed altre che dobbiamo ripulire in fase di disattivazione, anche se in questo momento non avete necessità di sviluppare questo aspetto, io consiglio sempre di inserire subito le due funzioni e casomai implementarle nel momento giusto durante lo sviluppo.

// Definizione delle funzioni da implementare
function myplugin_activate() {}
function myplugin_deactivate() {}

// Registrazione hook per richiamare le funzioni definite
register_activation_hook(__FILE__,'myplugin_activate');
register_deactivation_hook(__FILE__,'myplugin_deactivate');

Come potete vedere dal codice per agganciare le funzioni a determinate azioni si usano degli hooks che possono essere azioni e/o filtri, questo concetto è di vitale importanza nello sviluppo di un plugin, infatti non scrivete codice creativo ma usate gli agganci standard messi a disposizione da wordpress, solo in questa maniera avrete un plugin sempre funzionante e con pochi problemi legati al rilascio di nuove versioni.

Hooks

Su ogni componente che wordpress processa durante l’esecuzione del core viene messo a disposizione un hook che ci permette l’aggancio diretto al codice originario in maniera da apportare modifiche ai risultati (filters) o eseguire istruzioni aggiuntive (actions).

WordPress Plugin

I filtri si agganciano ad un elaborazione e cambiano il contenuto processato, ad esempio wordpress potrebbe calcolare il titolo di una pagina e noi con un filtro potremmo cambiare la stringa, sostituendola del tutto o aggiungendo una parte personalizzata.

Le azioni invece aggiungo dei processi PHP in determinati blocchi di wordpress, ad esempio durante l’elaborazione HEAD potremmo aggiungere una nostra action che inserisca dei nuovi link e il caricamento di risorse come fonts, javascript, ect.

Abbiamo visto che gli hook su cui possiamo intervenire sono tantissimi, ma come facciamo ad ottenere un’elenco completo di tutte le funzioni di wordpress che possiamo utilizzare come gancio per il nostro plugin ? Bastano questi due link:

Conoscere queste categorie è il motivo principale che ci permetterà di sviluppare un buon plugin e perdere anche meno tempo durante la fase di sviluppo. Non è la prima volta che leggo il codice di alcuni plugin dove trovo decine di istruzioni PHP che sarebbero potute essere sostituite con un filtro e una funzione di qualche riga.

Filtro

Adesso che avete avuto la pazienza e la volontà di leggere fino a qui, possiamo creare il nostro primo filtro e inserirlo in “my-plugin.php“. Ad esempio possiamo definire un filtro sul titolo e aggiungere una parola prima del titolo originale, per rimanere in tema scegliamo il prefisso “My Plugin” per ottenere un titolo tipo “My Plugin – Titolo”.

// Funzione che riceve il titolo originale e 
// ritorna indietro la stessa variabile modificata
function my_plugin_title($title) {
  $title = 'My Plugin - '.$title;
  return $title;
}

// Registrazione filtro sul titolo della pagina
add_filter('wp_title','my_plugin_title',99);

Adesso attivate il plugin dal pannello di amministrazione e controllate il titolo di una qualsiasi pagina del vostro sito sulla parte frontend, se vedete che tutti i titoli iniziano con “My Plugin” significa che il codice ha funzionato correttamente e possiamo passare ai punti successivi. Ovviamente se disattivate il plugin l’effetto dovrebbe scomparire.

Action

Dopo aver visto il funzionamento di un filtro passiamo ad implementare una funzione PHP che possa essere agganciata ad un’azione, ad esempio possiamo prendere un’azione chiamata wp_head che permette l’inserimento di informazioni nella parte <head> della nostra pagina HTML. Ad esempio possiamo inserire dei campi <meta> personalizzati o inserire dei <link> a delle risorse esterne da caricare.

// Definizione funzione che viene richiamata durante
// la creazione della sezione HTML chiamata <head>
function my_plugin_head_action() {
  echo '<meta name="myplugin" content="sono qui ..."/>'."\n";
}

// Registrazione hook per azione wp_head
add_action('wp_head','my_plugin_head_action');

Come per il filtro precedente, attivate il plugin e caricate una pagina qualsiasi del vostro sito (lato frontend), visualizzate la pagina sorgente con gli strumenti del browser e controllate se il codice meta che abbiamo definito è stato inserito correttamente.

Componenti

Anche se la maggior parte delle funzioni vengono sviluppate facendo riferimento ai diversi hooks diponibili, ci sono tanti componenti diversi che possiamo sviluppare con un plugin, ad esempio possiamo aggiungere widgets e/o shortcode o elementi da utilizzare solo nella parte amministrativa. Ovviamente adesso mi è impossibile elencare tutte le possibilità su un’unico articolo ma sicuramente scriverò delle guide aggiuntive che andranno ad integrare questo primo articolo sullo sviluppo di un plugin.

Aspetti da tenere in considerazione

  • Considerare un’installazione multisite.
  • Dividere il codice tra la parte pubblica e amministrativa.
  • Utilizzare programmazione ad oggetti e/o procedurale.
  • Prima di creare funzioni cercare che non esistano nel core.
  • Cancellare tutte le informazioni in fase di disinstallazione.
  • Particolare attenzione alle performance.
  • Pubblicazione plugin sul repository ufficiale.
  • Utilizzare client SVN per la gestione delle versioni.

Alcuni componenti

Sviluppare un plugin significa anche aggiungere dei componenti che normalmente vengono utilizzati anche nei temi come widgets, shotcodes e altro, vi riporto alcuni articoli che possono essere utili per sviluppare questo tipo di integrazione.

Se pensate che ci sia qualche argomento interessante da aggiungere scrivete pure un commento nella sezione dedicata che trovate in fondo a questa pagina.

Hangout

Questo argomento è stato anche affrontato in un hangout pubblico organizzato con la community italiana di wordpress WP Italyplus di cui potete trovate la registrazione sul proprio canale youtube. Nella descrizione del video “Come sviluppare un plugin in wordpress” trovate anche il link alla presentazione e alle slide utilizzate.

condividi