Come attivare i plugin tramite codice?


22

Se possibile, come si possono attivare plug-in installati (ovvero i file sono stati inseriti nella directory wp-content / plugins) da altri plugin?

Risposte:


30

Ecco come l'ho fatto in alcune app Web:

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( 'akismet/akismet.php' );

1
Come ha scritto Rarst, questo non è molto "sicuro". Dovresti assicurarti che i plugin attivati ​​in questo modo siano sicuri / non rompano il tuo sito.
sorich87,

10
Non è affatto sicuro, anche, ma diamine, se li stai attivando a livello di programmazione dovresti sapere cosa stai facendo. ;-)
Denis de Bernardy il

Sicurezza a parte - voglio dire, non fa parte della domanda, giusto? - Mi piace l'approccio di sorich perché chiama i filtri di attivazione standard. Quindi i plugin ottengono una modifica per eseguire le loro routine di installazione se ne hanno.
hakre,

3
Questo, almeno più recentemente, sta reinventando la ruota. Ho usato il built-in activate_plugin()e sembra funzionare allo stesso modo.
Jake,

1
@SagiveSEO È perfettamente sicuro - è simile a come lo fa WP, tranne richiedendo input / approvazione dell'utente e formando nonces e controlli per quelle nonces - basta introdurre i controlli necessari per avviare quella funzione ovunque - in modo che non sia possibile accedervi dall'esterno (da web ecc.) e non può essere chiamato in modo casuale in alcun modo.
Unity100

13

Il processo di attivazione del plug-in è codificato per funzionare con l'interfaccia di amministrazione WP. Esegue alcuni controlli per impedire l'abilitazione dei plugin con errori (il caricamento di questo tipo all'avvio potrebbe interrompere WP).

È gestito dalla activate_plugin()funzione ( sorgente ) che è documentata come inutilizzabile altrove.

Quindi, se si desidera attivare il plug-in in base al codice, l'obiettivo stesso è relativamente semplice: modificare l' active_pluginsopzione per includere quel plug-in. Ma dovrai ricreare da zero i relativi hook di attivazione e rischi di rompere il sito attivando senza passaggio sandbox.


7

I plugin sono memorizzati in un array nell'opzione 'active_plugins'. L'array contiene il percorso del file per ciascun plug-in attivo.

Per attivare un plugin è necessario determinare quale sarà il suo percorso, quindi passare quel percorso a activate_plugin($plugin_path).

Questo è più facile a dirsi che a farsi, e (almeno in 2.9) il codice di base non lo rende facile.

Prima di poter attivare_plugin () è necessario includere il file plugin.php da wp-admin / Includes /. Dovresti anche verificare che il tuo plugin non sia già attivo. Il risultato è simile al seguente (YMMV):

// Define the new plugin you want to activate
$plugin_path = '/path/to/your/new/plugin.php';
// Get already-active plugins   
$active_plugins = get_option('active_plugins');
// Make sure your plugin isn't active
if (isset($active_plugins[$plugin_path]))
    return;

// Include the plugin.php file so you have access to the activate_plugin() function
require_once(ABSPATH .'/wp-admin/includes/plugin.php');
// Activate your plugin
activate_plugin($plugin_path);

Lo utilizzo durante la produzione in WP 2.9 e non ho riscontrato grossi problemi, ma nei miei test ha avuto risultati inaspettati con WPMU, quindi fai attenzione quando lo usi nelle installazioni di rete.


passò molto tempo ma se ricordi, quale fu il risultato inaspettato su questo?
Ünsal Korkmaz,

Non ricordo assolutamente. Penso che non abbia funzionato e ho fatto le cose a mano perché non avevo troppi siti MS.
jerclarke,

come eseguo questo? se lo eseguo direttamente, get_option non è definito ...
Janus Troelsen,

Aggiungi questo in Functions.php e dovrebbe funzionare, anche se anche allora dovresti sempre mettere le cose in funzioni e agganciarle a "init" o "wp".
jerclarke,

3

Wordpress fornisce una funzione per l'attivazione dei plugin, secondo WP Codex

function plugin_activation( $plugin ) {
    if( ! function_exists('activate_plugin') ) {
        require_once ABSPATH . 'wp-admin/includes/plugin.php';
    }

    if( ! is_plugin_active( $plugin ) ) {
        activate_plugin( $plugin );
    }
}

plugin_activation('akismet/akismet.php');

Ethan, cosa c'è di sbagliato nella mia risposta?
Mowshon,

Mentre pubblicare solo il codice va bene per una risposta, può essere difficile interpretare per tutti i nuovi programmatori che leggono la tua risposta. In questo modo, OP può comprendere meglio come funziona il codice.
Ethan Jinks O'Sullivan,

0

Puoi semplicemente chiamare la funzione predefinita di WordPress.

activate_plugin('akismet/akismet.php');

Si prega di controllare il link qui sotto per maggiori dettagli.

attiva plugin

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.