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

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' );

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.

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

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.

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

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

@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.

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.

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.

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.

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

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

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

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');

Puoi semplicemente chiamare la funzione predefinita di WordPress.
activate_plugin('akismet/akismet.php');
Per maggiori dettagli, controlla il link qui sotto.

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');
