J'essaie d'activer le second plugin automatiquement tout en activant le premier plugin.
register_activation_hook(__FILE__, 'example_activation' );
function example_activation() {
include_once(ABSPATH .'/wp-admin/includes/plugin.php');
activate_plugin('hello.php');
}
Son ne fonctionne pas dans 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
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');
});
}
});
Pour une explication complète de ce qui se passe, voir cet article (il s’agit de 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-ins 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 non deuxième plug-in. Ainsi, votre deuxième plug-in semble ne pas être activé.
Solution: a mentionné dans le lien ci-dessus, 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);
}
Voici quelqu'un qui explique pourquoi cela ne fonctionnait pas pour lui et comment il a dû copier la méthode activate_plugin et créer son propre compte sans le problème: https://stackoverflow.com/questions/1415958/how- activer-wordpress-plugins en interne
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: http://hitchhackerguide.com/2011/02/11/activate_plugin/
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 des plug-ins via du code?