¿Cómo Activar Plugins a través de Código?
Si es posible, ¿cómo se pueden activar los plugins instalados (es decir, los archivos que se han colocado en el directorio wp-content/plugins) desde otros plugins?

Así es como lo hice en algunas aplicaciones 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' );

Como escribió Rarst, esto no es muy "seguro". Debes asegurarte de que los plugins que activas de esta manera sean seguros y no dañen tu sitio.

No es nada seguro, pero bueno, si los estás activando programáticamente se supone que sabes lo que haces. ;-)

Dejando de lado la seguridad -quiero decir, esto no es parte de la pregunta, ¿verdad?- me gusta el enfoque de sorich porque llama a los filtros de activación estándar. Así los plugins tienen la oportunidad de ejecutar sus rutinas de configuración si las tienen.

Esto, al menos más recientemente, es reinventar la rueda. He utilizado la función incorporada activate_plugin()
, y parece funcionar igual.

Me encantaría saber qué no es seguro en esto para poder solucionarlo, pero aparte de eso, ¡esta es la primera solución que funciona! Gracias...

@SagiveSEO Es perfectamente seguro - es similar a cómo lo hace WP, excepto que requiere entrada/aprobación del usuario y nonces de formulario con sus respectivas verificaciones - solo introduce las verificaciones necesarias para iniciar esa función en cualquier lugar - para que no pueda ser accedida desde fuera (desde la web, etc.), y no pueda ser llamada aleatoriamente de ninguna manera.

Solo dejo un comentario para estar de acuerdo con @unity100 y desarmar estos comentarios de "no es seguro". Esta es una forma perfectamente válida de hacerlo. Se trata de dónde y cómo lo uses, lo que puede hacerlo inseguro. Pero eso aplica a casi cualquier fragmento de código que copies de internet.

El proceso de activación de plugins está codificado para funcionar con la interfaz administrativa de WordPress. Realiza algunas verificaciones para evitar habilitar plugins con errores (cargarlos al inicio podría dañar WordPress).
Está gestionado por la función activate_plugin()
(fuente) que está documentada como no utilizable en otros contextos.
Por lo tanto, si deseas activar un plugin mediante código, el objetivo en sí es relativamente sencillo: modificar la opción active_plugins
para incluir ese plugin. Pero tendrás que recrear manualmente los hooks de activación relacionados desde cero y arriesgarás romper el sitio al activar sin el paso de sandbox.

Los plugins se almacenan en un array dentro de la opción 'active_plugins'. Este array contiene la ruta del archivo de cada plugin que está activo.
Para activar un plugin necesitas determinar cuál será su ruta y luego pasar esa ruta a activate_plugin($plugin_path)
.
Sin embargo, esto es más fácil decirlo que hacerlo, y (al menos en la versión 2.9) el código núcleo no lo facilita.
Antes de poder usar activate_plugin() necesitas incluir el archivo plugin.php de wp-admin/includes/. También deberías verificar que tu plugin no esté ya activo. El resultado se vería algo así (puede variar):
// Define el nuevo plugin que quieres activar
$plugin_path = '/ruta/a/tu/nuevo/plugin.php';
// Obtiene los plugins ya activos
$active_plugins = get_option('active_plugins');
// Asegúrate de que tu plugin no está activo
if (isset($active_plugins[$plugin_path]))
return;
// Incluye el archivo plugin.php para tener acceso a la función activate_plugin()
require_once(ABSPATH .'/wp-admin/includes/plugin.php');
// Activa tu plugin
activate_plugin($plugin_path);
Yo uso esto en producción con WP 2.9 y no he tenido problemas mayores, pero en mis pruebas dio resultados muy inesperados con WPMU, así que ten cuidado al usarlo en instalaciones en red.

pasó mucho tiempo pero si recuerdas, ¿cuál fue el resultado inesperado en esto?

No lo recuerdo para nada. Creo que simplemente no funcionó y terminé haciendo las cosas manualmente porque no tenía demasiados sitios MS.

¿cómo ejecuto esto? si lo ejecuto directamente, get_option no está definido...

WordPress proporciona una función para activar plugins, según 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');

Puedes simplemente llamar a la función predeterminada de WordPress.
activate_plugin('akismet/akismet.php');
Por favor, revisa el siguiente enlace para más detalles.

Si conoces los nombres de los plugins, puedes usar la función activate_plugin() para activarlos. En el ejemplo a continuación, estoy usándola con el hook after_setup_theme, pero puedes cambiarlo para que se ajuste mejor a tu caso.
En este ejemplo, estoy activando el 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');
