pourquoi activate_plugin ne fonctionne pas dans register_activation_hook

10

J'essaie d'activer le second plugin automatiquement en même temps que le premier plugin.

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

Cela ne fonctionne pas à l'intérieur de register_activation_hook .. Son fonctionnement si je l'utilise directement comme:

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

Comment puis-je résoudre ce problème? Merci pour l'aide

Solution:

J'utilise ceci pour moi maintenant:

// 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');
        });
    }
}); 
    
posée Ünsal Korkmaz 24.08.2012 - 18:47

2 réponses

8

Pour une explication complète de ce qui se passe, consultez ce message (c'est pour désactiver les plug-ins, mais le problème est le même).

Une brève explication: Les plug-ins sont essentiellement activés en les ajoutant au tableau des pug-in actifs stockés dans la base de données. Lorsque vous activez le premier plug-in, WordPress récupère le tableau de tous les plug-ins actuellement actifs, y ajoute le plug-in (mais ne met pas encore à jour la base de données), puis exécute votre rappel d'installation.

Ce rappel d'installation exécute votre code.

Après cela, WordPress met à jour la base de données avec le tableau ci-dessus, qui contient le premier mais pas le deuxième plug-in. Ainsi, votre deuxième plug-in semble ne pas être activé.

Solution: a mentionné dans le lien ci-dessus que la solution ressemble à ceci (non testé):

//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);
}
    
réponse donnée Stephen Harris 31.08.2012 - 23:33
2

Voici quelqu'un qui explique pourquoi cela ne fonctionnait pas pour lui et comment il a dû copier la méthode activate_plugin et en créer une personnalisée sans le problème: enlace

Voici la source originale du code activate_plugin, que vous pouvez utiliser pour créer votre propre fonction et voir où cela ne fonctionne pas: enlace

Voici une solution possible, contenant une méthode d'activation de plug-in alternative que quelqu'un d'autre a probablement retirée de ce code source: Comment activer les plugins via le code?

    
réponse donnée mltsy 24.08.2012 - 19:00

Lire d'autres questions sur les étiquettes