Wordpress: modificare i plugin

Wordpress: modificare i plugin

Il progetto a cui sto lavorando in questi giorni prevede la modifica del funzionamento del plugin Eshop di Wordpress. Il lavoro è reso difficile dalla natura stessa dei plugin di Wordpress, ossia questa confusione tra marcatura e struttura PHP o, se vogliamo, tra Model e View. Desidero in questa sede condividere con voi alcune riflessioni e consigli su come modificare un plugin di Wordpress.

PHP e HTML

La prima cosa da fare, a livello operativo, è separare a livello logico la marcatura HTML dalla struttura PHP. Bisogna quindi individuare dove il plugin genera la marcatura e quale tipo di marcatura genera. Un plugin può anche generare marcatura non valida (secondo la DTD corrente del nostro sito), quindi è necessario come prima cosa verificare che l'output HTML sia valido e conforme allo standard del nostro sito e, all'occorrenza, modificarlo.

In PHP, invece, è necessario separare, sempre a livello logico, le funzioni core del linguaggio dalle funzioni di Wordpress. Alcune funzioni di Wordpress non sono altro che dei wrapper costruiti intorno a molte funzioni core PHP. Per esempio, wp_mail() è un wrapper costruito intorno alle funzione mail() di PHP.

Le funzioni di Wordpress vengono per lo più usate nel loop, ma molto spesso possono venire usate per gestire alcune caratteristiche del plugin (come ad esempio l'uso di file JavaScript o fogli di stile CSS). Le funzioni PHP vengono invece usate in tutti gli altri casi, spesso per còmpiti generali.

Una volta operata questa distinzione, bisogna individuare i due grandi blocchi logici di un plugin:

  1. gli hook
  2. le funzioni

Un hook serve ad agganciare una routine del plugin ad un evento o parte di Wordpress, come per esempio la pubblicazione di un post o il contenuto del post stesso. Le funzioni, invece, contengono le routine del plugin e vanno analizzate attentamente per capire cosa effettivamente fa il nostro plugin all'interno di Wordpress.

Per esempio, un plugin può aggiungere una funzione ad una parte di Wordpress sotto forma di filtro:


function do_something($content) {
  //...
}
add_filter('the_content', 'do_something');

In questo caso viene filtrato il contenuto del post (ma non modificato nel database). È fondamentale afferrare la logica delle routine del plugin per poterne modificare il codice.

Usare una sandbox

Consiglio sempre di modificare il plugin in una sandbox locale e non online. Questo perchè i plugin possono bloccare completamente Wordpress se contengono degli errori o, più spesso, se le nostre modifiche causano errori (PHP). Clonate il sito su cui lavorate in locale e testate lì le vostre modifiche.

Gestione degli errori

L'errore in assoluto più comune da me riscontrato con i plugin, a parte quelli di sintassi PHP, è il cosiddetto headers already sent. Questo errore deriva dal fatto che i file PHP che contengono spazi in eccesso nel codice e che hanno il tag di chiusura PHP, generano questo errore quando nel tema viene usata la funzione header() di PHP. Per ovviare al problema si può eliminare il tag di chiusura PHP dai file che contengono solo codice PHP o evitare di inserire spazi in eccesso (soprattutto alla fine dei file).

Come ho detto in precedenza, per evitare problemi è consigliabile testare le nostre modifiche in una sandbox. Inoltre è di fondamentale importanza conoscere, oltre a quella delle funzioni PHP, anche la sintassi delle funzioni di Wordpress.

Infine, usate un editor PHP in grado di rilevare gli errori di sintassi. Questo semplifica notevolmente il lavoro.

Torna su