¿Cómo Activar Plugins a través de Código?

14 nov 2010, 14:24:24
Vistas: 51.4K
Votos: 26

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?

0
Todas las respuestas a la pregunta 6
8
34

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' );
14 nov 2010 17:40:07
Comentarios

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.

sorich87 sorich87
14 nov 2010 17:46:29

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

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

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.

hakre hakre
15 nov 2010 00:38:45

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

Jake Jake
18 sept 2013 21:21:56

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

Sagive Sagive
3 jun 2014 01:24:47

¿En qué archivo fuente va esto?

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

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

unity100 unity100
24 oct 2018 04:38:27

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.

maryisdead maryisdead
24 abr 2020 13:44:33
Mostrar los 3 comentarios restantes
0
14

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.

14 nov 2010 14:55:57
4

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.

14 nov 2010 21:14:18
Comentarios

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

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

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

jerclarke jerclarke
28 ago 2012 20:48:45

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

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

Añade esto en functions.php y debería funcionar, aunque incluso entonces siempre deberías poner las cosas en funciones y engancharlas a "init" o "wp".

jerclarke jerclarke
26 ago 2016 17:57:41
2

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');
21 oct 2016 15:09:12
Comentarios

Ethan, ¿qué tiene de malo mi respuesta?

Mowshon Mowshon
28 oct 2016 17:59:19

Aunque publicar solo el código está bien para una respuesta, puede ser difícil de interpretar para los programadores nuevos que lean tu respuesta. De esta manera, el OP (autor original de la publicación) puede tener una mejor comprensión de cómo funciona tu código.

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

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.

activar plugin

30 oct 2019 10:06:34
0

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');
11 oct 2023 20:19:50