Come Attivare i Plugin tramite Codice?

14 nov 2010, 14:24:24
Visualizzazioni: 51.4K
Voti: 26

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

0
Tutte le risposte alla domanda 6
8
34

Ecco come l'ho implementato in alcune applicazioni web:

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

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

    return null;
}
run_activate_plugin( 'akismet/akismet.php' );
14 nov 2010 17:40:07
Commenti

Come ha scritto Rarst, questo non è molto "sicuro". Dovresti assicurarti che i plugin che attivi in questo modo siano sicuri e non rompano il tuo sito.

sorich87 sorich87
14 nov 2010 17:46:29

Non è affatto sicuro, ma se li stai attivando programmaticamente dovresti sapere cosa stai facendo. ;-)

Denis de Bernardy Denis de Bernardy
14 nov 2010 21:45:43

Mettendo da parte la sicurezza - voglio dire, non è parte della domanda, giusto? - mi piace l'approccio di sorich perché richiama i filtri standard di attivazione. Quindi i plugin hanno la possibilità di eseguire le loro routine di configurazione, se ne hanno.

hakre hakre
15 nov 2010 00:38:45

Questo, almeno recentemente, è reinventare la ruota. Ho utilizzato la funzione integrata activate_plugin() e sembra funzionare allo stesso modo.

Jake Jake
18 set 2013 21:21:56

Mi piacerebbe sapere cosa non è sicuro in questo codice così posso sistemarlo, ma a parte questo è la prima soluzione che funziona! Grazie...

Sagive Sagive
3 giu 2014 01:24:47

In quale file sorgente va inserito questo codice?

Janus Troelsen Janus Troelsen
25 ago 2016 13:16:08

@SagiveSEO È perfettamente sicuro - è simile a come lo fa WP, tranne per il fatto che richiede input/approvazione dell'utente e form nonce e controlli per quei nonce - basta introdurre i controlli necessari per avviare quella funzione in qualsiasi punto - in modo che non possa essere accessibile dall'esterno (dal web ecc.), e non possa essere chiamata casualmente in alcun modo.

unity100 unity100
24 ott 2018 04:38:27

Mi limito a commentare per concordare con @unity100 e per disarmare questi commenti "non sicuro". Questo è un modo perfettamente valido per farlo. Dipende da dove e come lo utilizzerai, che può renderlo non sicuro. Ma questo vale per qualsiasi pezzo di codice che copi da internet.

maryisdead maryisdead
24 apr 2020 13:44:33
Mostra i restanti 3 commenti
0
14

Il processo di attivazione del plugin è codificato per funzionare con l'interfaccia di amministrazione di WP. Esegue alcuni controlli per evitare l'abilitazione di plugin con errori (caricarli all'avvio potrebbe compromettere WP).

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

Quindi, se vuoi attivare un plugin tramite codice, l'obiettivo in sé è relativamente semplice: modificare l'opzione active_plugins per includere quel plugin. Ma dovrai ricreare da zero gli hook di attivazione correlati e rischierai di compromettere il sito attivando senza il passaggio in sandbox.

14 nov 2010 14:55:57
4

I plugin sono memorizzati in un array nell'opzione 'active_plugins'. L'array contiene il percorso del file per ogni plugin 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 nella versione 2.9) il codice core non lo rende semplice.

Prima di poter usare activate_plugin() devi includere il file plugin.php da wp-admin/includes/. Dovresti anche verificare che il tuo plugin non sia già attivo. Il risultato sarà qualcosa del genere (i risultati possono variare):

// Definisci il nuovo plugin che vuoi attivare
$plugin_path = '/percorso/del/tuo/nuovo/plugin.php';
// Ottieni i plugin già attivi   
$active_plugins = get_option('active_plugins');
// Verifica che il tuo plugin non sia già attivo
if (isset($active_plugins[$plugin_path]))
    return;

// Includi il file plugin.php per avere accesso alla funzione activate_plugin()
require_once(ABSPATH .'/wp-admin/includes/plugin.php');
// Attiva il tuo plugin
activate_plugin($plugin_path);

Io lo uso in produzione su WP 2.9 e non ho avuto problemi rilevanti, ma durante i test ho riscontrato risultati molto imprevisti con WPMU, quindi fai attenzione a usarlo su installazioni di rete.

14 nov 2010 21:14:18
Commenti

è passato molto tempo ma se ti ricordi, qual è stato il risultato inaspettato su questo?

Ünsal Korkmaz Ünsal Korkmaz
25 ago 2012 13:59:53

Non me lo ricordo proprio. Penso semplicemente che non funzionasse e ho fatto le cose manualmente perché non avevo troppi siti MS.

jerclarke jerclarke
28 ago 2012 20:48:45

come posso eseguirlo? se lo eseguo direttamente, get_option non è definito...

Janus Troelsen Janus Troelsen
25 ago 2016 12:45:34

Aggiungi questo in functions.php e dovrebbe funzionare, anche se in ogni caso dovresti sempre inserire le cose in funzioni e agganciarle a "init" o "wp".

jerclarke jerclarke
26 ago 2016 17:57:41
2

WordPress fornisce una funzione per l'attivazione dei plugin, come indicato nel 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');
21 ott 2016 15:09:12
Commenti

Ethan, cosa c'è che non va nella mia risposta?

Mowshon Mowshon
28 ott 2016 17:59:19

Anche se pubblicare solo il codice può andar bene come risposta, potrebbe essere difficile da interpretare per i nuovi programmatori che leggono la tua risposta. In questo modo, l'autore del post può capire meglio come funziona il tuo codice.

Ethan Rævan Ethan Rævan
29 ott 2016 00:32:55
0

Puoi semplicemente chiamare la funzione predefinita di WordPress.

activate_plugin('akismet/akismet.php');

Per maggiori dettagli, controlla il link qui sotto.

attiva plugin

30 ott 2019 10:06:34
0

Se conosci i nomi dei plugin, puoi utilizzare la funzione activate_plugin() per attivarli. Nell'esempio seguente, la sto usando con l'hook after_setup_theme, ma puoi modificarlo per adattarlo meglio al tuo caso.

In questo esempio, sto attivando il plugin WooCommerce:

function activate_mytheme_required_plugins() {
    if (!is_plugin_active('woocommerce/woocommerce.php')) {
        activate_plugin('woocommerce/woocommerce.php');
    }
}
add_action('after_setup_theme', 'activate_mytheme_required_plugins');
11 ott 2023 20:19:50