Come escludere un plugin dall’aggiornamento automatico.
Quando sviluppiamo un sito ed utilizziamo i plugin per estendere alcune funzionalità, molte volte l’installazione la facciamo direttamente dal repository di wordpress.
Dopo averlo installato lo possiamo modificare a nostro piacimento inserendo alcune funzioni personalizzate per farlo funzionare in base alle nostre esigenze. Il plugin scaricato dal repository, sarà soggetto a controllo da parte di wordpress per verificare la presenza di nuove versioni da parte dello sviluppatore del plugin originale. E cosa succederebbe se per sbaglio lanciamo l’aggiornamento senza ricordarci che quel plugin lo abbiamo modificato noi per adattarlo alle nostre esigenze? Quello che succede è che perderemo completamente tutte le modifiche apportate e, se non abbiamo la versione modificata, avremo creato un grosso problema.
Questo problema potrebbe avvenire soprattutto se sviluppiamo il sito e lo rilasciamo al cliente con gli accessi da amministratore quindi, con la piena possibilità di aggiornare il core di wordpress o di aggiornare in piena autonomia i plugin che wordpress ci suggerisce sono disponibili per l’aggiornamento .
Per ovviare a questa situazione, possiamo inserire il seguente codice all’interno del plugin che a noi interessa non far controllare per eventuali aggiornamenti:
add_filter( 'http_request_args', 'plugin_prevent_update_check', 5, 2 );
function plugin_prevent_update_check( $r, $url ) {
if ( 0 !== strpos( $url, 'http://api.wordpress.org/plugins/update-check' ) )
return $r; // Not a plugin update request. Bail immediately.
$plugins = unserialize( $r['body']['plugins'] );
unset( $plugins->plugins[ plugin_basename( __FILE__ ) ] );
unset( $plugins->active[ array_search( plugin_basename( __FILE__ ), $plugins->active ) ] );
$r['body']['plugins'] = serialize( $plugins );
return $r;
}
Come funziona questo codice:
Il codice sopra descritto prende dall’argomento $r passato alla funzione, unserializza i dati e verifica se nell’array è presente il plugin che vogliamo eliminare dall’aggiornamento tramite il path del file. Nel caso lo trovi elimina dall’array il nostro plugin e riserializza i dati ritornando la variabile $r.
Se vogliamo escludere dall’aggiornamento un solo plugin possiamo copiare ed incollare il codice sopra descritto all’interno della pagina principale del plugin. Nel caso in cui avessimo bisogno di escludere più plugin, dobbiamo dare un nome univoco alla funzione altrimenti riceveremo un errore 500 da parte del server. Quindi dovremmo trovarci una situazione simile:
Plugin1 – path: /wp-content/plugins/plugin1/plugin1.php
add_filter( 'http_request_args', 'plugin1_prevent_update_check', 5, 2 );
function plugin1_prevent_update_check( $r, $url ) {
...
}
Plugin2 – path: /wp-content/plugins/plugin2/plugin2.php
add_filter( 'http_request_args', 'plugin2_prevent_update_check', 5, 2 );
function plugin2_prevent_update_check( $r, $url ) {
...
}
PluginN – path: /wp-content/plugins/pluginN/pluginN.php
add_filter( 'http_request_args', 'plugin2_prevent_update_check', 5, 2 );
function pluginN_prevent_update_check( $r, $url ) {
...
}