Richiamare i plugin nei temi di Wordpress in modo sicuro

Come rendere un plugin sicuro…
Molti plugin di Wordpress richiedono che tu inserisca manualmente una funzione nel codice del tema in uso (ad esempio per Wikiovote devi aggiungere <?php wikiovote(); ?> nel punto in cui vuoi far comparire il pulsante di voto). Questo approccio ha però un problema: nel momento in cui disattiverai il plugin (magari durante un aggiornamento) Wordpress non troverà più quella funzione e interromperà la visualizzazione del tuo blog con un bel errore PHP:
Fatal error: Call to undefined function wikiovote()
Impedire l’errore con function_exists
Il problema nasce dal fatto che le funzioni dei plugin vengono definite solo se il plugin è attivo; se, per una qualsiasi ragione, il plugin dovesse venire disattivato, si avrebbe una chiamata ad una funzione non definita.
Per fortuna il PHP ci mette a disposizione la funzione function_exists, che prende in input il nome di una funzione e restituisce in output true solo se la funzione esiste.
Pertanto, piuttosto che chiamare la funzione in modo tradizionale:
<?php wikiovote(); ?>
è preferibile chiamarla dentro un blocco IF:
<?php if (function_exists("wikiovote")) wikiovote(); ?>
In questo modo la funzione wikiovote verrà chiamata solo se definita (se, cioè, il plugin è attivo), altrimenti verrà visualizzato il blog senza il pulsante di voto… ma anche senza errori.
A volte potresti voler circondare la chiamata alla funzione del plugin con del codice HTML (ad esempio, per aggiungere del testo descrittivo attorno al pulsante di voto); in questo caso ti conviene usare le parentesi graffe per l’IF, e inserire tutto il blocco di codice all’interno di queste:
<?php if (function_exists("wikiovote")) { ?>
<div style="float:right;">
<h2>Piaciuto l'articolo?</h2>
Votalo su Wikio:
<?php wikiovote(); ?>
</div>
<?php } /* FINE IF */ ?>
Per gli sviluppatori di temi: come rendere i template di Wordpress retrocompatibili
Si può sfruttare function_exists anche per rendere i temi di Wordpress retrocompatibili, quando possibile. La versione corrente di Wordpress potrebbe aver introdotto, infatti, delle funzioni non presenti nelle versioni precedenti: in quest’ultimo caso, si otterrebbe sempre un errore di undefined function.
Per esempio, Wordpress 2.5 introduce la funzione get_avatar per aggiungere i gravatar nei commenti. Come ho scritto in un commento ad un post di Cristiano Fino, per rendere il tema di Wordpress retrocompatibile basta chiamare la funzione in questo modo:
if (function_exists("get_avatar")) echo get_avatar( $comment, 32 );
Se ora il tuo tema verrà installato in una versione di Wordpress vecchia, i gravatar non verranno visualizzati, piuttosto che restituire errore.
(è da tempo che volevo pubblicare questo post - il commento su cristianofino.net dimostra la mia buona fede - ma i “big” mi hanno comunque anticipato con “Safest Way to Include Plugin Code in Themes”, a cui questo post si ispira).
Articoli simili:
Se questo articolo ti è stato utile, segnalalo sul tuo sito! Puoi inoltre seguire comodamente gli aggiornamenti di Techlog tramite il feed RSS; infine puoi lasciare un commento se ti serve aiuto (o anche solo per un saluto); anche qui non serve registrarsi (sono abilitati anche i commenti anonimi; l'E-Mail serve, eventualmente, per ricevere le notifiche delle nuove risposte). ;-)





August 24th, 2008 at 3:12 pm
Nessuno potrebbe mettere in dubbio la tua buona fede
Aggiungo che anche se è già stato scritto qualcosa di inerente:
1) tu hai scritto un articolo differente e nella nostra madre lingua (non tutti conoscono l’inglese)
2) ti assicuro che prima dell’articolo da te citato l’argomento è stato già sviscerato altrove (sempre all’estero), alla faccia dell’originalità
Concludo ribadendo che la tua tecnica descrittiva rende gli argomenti sempre in maniera estremamente comprensibile, per cui, continua così e non ti crucciare di eventuali ispirazioni a fonti esterne
August 24th, 2008 at 3:27 pm
@ Cristiano:
Grazie!
Cristiano scrive:
Ho notato.
Ho letto di altri metodi che fanno uso degli hook di wordpress, ma questo, sinceramente, mi sembra più semplice e comprensibile. Ok, per ogni plugin si chiamano due funzioni e un if piuttosto che una sola… ma non sono sicuro che utilizzare gli hook sia più performante. 
August 25th, 2008 at 10:41 pm
A mio avviso la soluzione migliore è quella proposta anche da te
August 25th, 2008 at 11:06 pm
@ Cristiano:
Se mi prende il matto, faccio un test delle prestazioni delle diverse soluzioni
August 27th, 2008 at 12:21 pm
cool
September 1st, 2008 at 11:51 pm
Ciao, Andrea…sempre impegnato con dritte e soluzioni, eh?
Vai a leggere qui:
http://scientificando.splinder.com/post/18242345/Il+Mio+Blog+Day+2008
C’è qualcosa che ti riguarda…
baciotti
annarita:)
September 2nd, 2008 at 1:03 am
annarita scrive:
Già, anche se ultimamente sto battendo un po’ la fiacca…
PS: la prossima riguarderà Blogger.
annarita scrive:
Faccio subito!
annarita scrive:
Anche a te!