Por que activate_plugin não está funcionando no register_activation_hook

Estou tentando ativar o segundo plugin automaticamente enquanto ative o primeiro plugin.

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

Não está funcionando dentro de register_activation_hook .. Está funcionando se eu usá-lo diretamente como:

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

Como posso corrigi-lo? Obrigado pela ajuda

Solução:

Estou usando isso para mim agora:

 // 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'); }); } }); 

Solutions Collecting From Web of "Por que activate_plugin não está funcionando no register_activation_hook"

Para uma explicação completa sobre o que está acontecendo, veja esta publicação (isso é para desativar plug-ins, mas o problema é o mesmo).

Uma breve explicação: os plug-ins são essencialmente ativados, adicionando-os à matriz de pug-ins ativos armazenados no database. Quando você ativa o primeiro plug-in, o WordPress recupera a matriz de todos os plug-ins atualmente ativos, adiciona o plug-in a ele (mas não atualiza o database ainda) e, em seguida, executa o retorno de chamada da instalação.

Este retorno de chamada de instalação executa seu código.

Depois disso, o WordPress atualiza o database com a matriz acima, que contém o primeiro, mas não o segundo plug-in. Assim, o seu segundo plug-in não parece ser ativado.

Solução: mencionou no link acima a solução é algo assim (não testado):

 //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); } 

Aqui está alguém explicando por que não estava funcionando para ele, e como ele tinha que copiar o método ativar_plugin e criar um próprio dele sem o problema: https://stackoverflow.com/questions/1415958/how-to- ativar-wordpress-plugins-internamente

Aqui está a fonte original do código activation_plugin, que você poderia usar para criar sua própria function e ver onde não está funcionando para você: http://hitchhackerguide.com/2011/02/11/activate_plugin/

Aqui está uma solução possível, contendo um método alternativo de ativação de plugin que outra pessoa provavelmente reduziu a partir desse código-fonte: como ativar plugins via código?