¿Cómo activar complementos a través del código?

21

Si es posible, ¿cómo pueden activarse los complementos instalados (lo que significa que los archivos se han colocado en el directorio wp-content / plugins) desde otros complementos?

    
pregunta rsman 14.11.2010 - 13:24

4 respuestas

28

Así es como lo hice en algunas aplicaciones 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' );
    
respondido por el sorich87 14.11.2010 - 16:40
13

El proceso de activación del complemento está codificado para funcionar con la interfaz de administración de WP. Realiza algunas comprobaciones para evitar que se habiliten los complementos con errores (cargarlos en el inicio podría interrumpir el WP).

Es manejado por la función activate_plugin() ( fuente ) que se documenta como inutilizable en otro lugar.

Entonces, si desea activar el complemento por código, el objetivo en sí es relativamente fácil: cambiar la opción active_plugins para incluir ese complemento. Pero tendrá que volver a crear los ganchos de activación relacionados desde cero y se arriesgará a romper el sitio al activarlo sin el paso de sandbox.

    
respondido por el Rarst 14.11.2010 - 13:55
5

Los complementos se almacenan en una matriz en la opción 'active_plugins'. La matriz contiene la ruta del archivo a cada complemento que está activo.

Para activar un complemento, necesita determinar cuál será su ruta, luego pase esa ruta a activate_plugin($plugin_path) .

Sin embargo, es más fácil decirlo que hacerlo, y (al menos en 2.9) el código del núcleo no lo hace fácil.

Antes de que puedas activar_plugin () necesitas incluir el archivo plugin.php de wp-admin / includes /. También debe verificar que su complemento no esté activo. El resultado se ve algo como esto (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 uso en producción en WP 2.9 y no he tenido ningún problema importante, pero en mis pruebas tuvo resultados muy inesperados con WPMU, así que ten cuidado al usar esto en las instalaciones de red.

    
respondido por el jerclarke 14.11.2010 - 20:14
2

Wordpress proporciona una función para activar complementos, de acuerdo con 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');
    
respondido por el Mowshon 21.10.2016 - 14:09

Lea otras preguntas en las etiquetas