Come forzare la riattivazione automatica di un plugin in WordPress

Stiamo ereditando da un nuovo partner una serie di siti web aziendali e istituzionali realizzati in WordPress che, una volta spostati, hanno bisogno di manutenzione e messa in sicurezza.

In più di un caso i lavori sono stati realizzati adottando alcune scelte piuttosto custom, niente di grave e sempre con finalità virtuose, ma diciamo che la longevità dei siti e il fatto di essere stati gestiti in diverse fasi da più sviluppatori e su piattaforme di hosting generaliste anziché su server dedicati ha fatto venire meno il rispetto di alcuni standard.

Uno degli ultimi progetti che abbiamo spostato sui nostri server mostra un’anomalia piuttosto seccante: uno dei plugin fondamentali per il funzionamento dell’area eventi si disattiva automaticamente, in maniera completamente randomica e senza lasciare alcuna traccia nei log di sistema.

Analizzando il codice abbiamo capito che si tratta molto probabilmente di una precauzione inserita nel plugin dal suo stesso sviluppatore, ma siamo in possesso di regolare licenza e abbiamo pagato il dovuto – oltre ad averci passato sopra già troppo tempo!

Questo è quindi uno dei casi in cui non rispettare gli standard diventa un obbligo semplicemente perché qualcuno, prima di te, ha fatto altrettanto. Intendo: non ha rispettato gli standard, si capisce no?

Bene, la soluzione più spartana ma efficace è quella di introdurre nel file functions.php del tema corrente una funzione che fa semplicemente questo:

  • prende l’elenco dei plugin attivi
  • verifica se tra questi c’è il plugin incriminato
  • se non c’è, ne forza l’attivazione

Ecco il codice che fa la magia:

function run_activate_plugin( $plugin ) {
    $current = get_option( 'active_plugins' );
    $plugin = plugin_basename( trim( $plugin ) );

    if ( !in_array( $plugin, $current ) ) {
        $current[] = $plugin;
        sort( $current );
        do_action( 'activate_plugin', trim( $plugin ) );
        update_option( 'active_plugins', $current );
        do_action( 'activate_' . trim( $plugin ) );
        do_action( 'activated_plugin', trim( $plugin) );
    }

    return null;
}
run_activate_plugin( 'all-in-one-event-calendar-extended-views/all-in-one-event-calendar-extended-views.php' );

Nel nostro caso, il plugin in questione è appunto all-in-one-event-calendar-extended-views/all-in-one-event-calendar-extended-views.php e viene indicato com’è giusto che sia con la relativa directory:

nomeplugin/nomeplugin.php

Una volta inserita questa porzione di codice – vi consiglio di posizionarla in fondo al file functions.php del tema attivo – il plugin non può più essere disattivato: se la disattivazione avviene per qualsiasi motivo anche non accidentale sarà il tema stesso a riattivarlo la prima volta che un visitatore apre una qualsiasi pagina del sito.

Condivido

Leave a comment