¿Por qué enable_plugin no está funcionando en register_activation_hook

10

Estoy intentando activar el segundo complemento automáticamente al activar el primer complemento.

register_activation_hook(__FILE__, 'example_activation' );
function example_activation() {
        include_once(ABSPATH .'/wp-admin/includes/plugin.php');
        activate_plugin('hello.php');
}

No funciona dentro de register_activation_hook .. Funciona si lo uso directamente como:

include_once(ABSPATH .'/wp-admin/includes/plugin.php');
activate_plugin('hello.php');

¿Cómo puedo solucionarlo? Gracias por ayudar

Solución:

Estoy usando esto para mí ahora:

// When this plugin activate, activate another plugin too.
register_activation_hook(__FILE__, function(){
    $dependent = 'hello.php';
    if( is_plugin_inactive($dependent) ){
        add_action('update_option_active_plugins', function($dependent){
            /* for some reason, 
            activate_plugin($dependent); 
               is not working */
            activate_plugin('hello.php');
        });
    }
}); 

// When this plugin deactivate, deactivate another plugin too.
register_deactivation_hook(__FILE__, function(){
    $dependent = 'hello.php';
    if( is_plugin_active($dependent) ){
        add_action('update_option_active_plugins', function($dependent){
            deactivate_plugins('hello.php');
        });
    }
}); 
    
pregunta Ünsal Korkmaz 24.08.2012 - 18:47

2 respuestas

8

Para obtener una explicación completa de lo que está sucediendo, consulte esta publicación (esto es para desactivar los plug-ins, pero el problema es el mismo).

Una breve explicación: los complementos se activan esencialmente agregándolos a la matriz de pug-ins activos almacenados en la base de datos. Cuando activa el primer complemento, WordPress recupera la matriz de todos los complementos actualmente activos, agrega el complemento (pero no actualiza la base de datos todavía) y luego ejecuta la devolución de llamada de la instalación.

Esta devolución de llamada de instalación ejecuta su código.

Después de eso, WordPress actualiza la base de datos con la matriz anterior, que contiene el primer complemento, pero no . Por lo tanto, su segundo complemento no se activará.

Solución: ha mencionado en el enlace anterior que la solución es algo como esto (sin probar):

//This goes inside Plugin A.
//When A is activated. activate B.
register_activation_hook(__FILE__,'my_plugin_A_activate'); 
function my_plugin_A_activate(){
    $dependent = 'B/B.php';
    if( is_plugin_inactive($dependent) ){
         add_action('update_option_active_plugins', 'my_activate_dependent_B');
    }
}

function my_activate_dependent_B(){
    $dependent = 'B/B.php';
    activate_plugin($dependent);
}
    
respondido por el Stephen Harris 31.08.2012 - 23:33
2

Aquí hay alguien que explica por qué no funcionó para él, y cómo tuvo que copiar el método activar_plugin y crear uno personalizado sin el problema: enlace

Aquí está la fuente original del código de active_plugin, que puede usar para crear su propia función y ver dónde no funciona para usted: enlace

Aquí hay una posible solución, que contiene un método de activación de complemento alternativo que probablemente alguien más haya descartado de ese código fuente: ¿Cómo activar complementos a través del código?

    
respondido por el mltsy 24.08.2012 - 19:00

Lea otras preguntas en las etiquetas