Por que activ_plugin não está funcionando no register_activation_hook


10

Estou tentando ativar o segundo plug-in automaticamente ao ativar o primeiro plug-in.

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 corrigir isso? 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');
        });
    }
}); 

Eu li errado sua postagem originalmente. Eu tenho que dizer, está formatado corretamente. Esta função está no principal do seu plugin?
Chris

Só um segundo. Precisa editar minha postagem.
Chris

sim a sua em primeiro plugin que tentando ativar segundo plug-in .. segundo plugin é hello.php como exemplo
Ünsal Korkmaz

Respostas:


8

Para obter uma explicação completa do que está acontecendo, consulte esta postagem (isto é 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 banco de dados. Quando você ativa o primeiro plug-in, o WordPress recupera a matriz de todos os plug-ins ativos no momento, adiciona o plug-in a ele (mas ainda não atualiza o banco de dados) e executa o retorno de chamada da instalação.

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

Depois disso, o WordPress atualiza o banco de dados com a matriz acima, que contém o primeiro, mas não o segundo plug-in. Portanto, seu segundo plug-in parece não estar ativado.

Solução: mencionou no link acima que a solução é algo como isto (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);
}

Se você tiver tempo, edito minha pergunta para escrever o que estou usando agora. Você pode ver enable_plugin ($ dependente); não está funcionando ao ativar o plug-in. Alguma idéia de como consertar isso?
Ünsal Korkmaz

Copiar seu código em um plug-in de teste (e criar outro hello.phpplug-in de teste - funciona bem para mim). Lembre-se de que, se os plug-ins existirem em um subdiretório, você precisará fornecer a pasta: por exemplo hello/hello.php.
Stephen Harris

meu código vai funcionar normais .. problema está começando quando você mudar activate_plugin('hello.php');de linha comactivate_plugin($dependent);
Ünsal Korkmaz

Isso ocorre porque a variável fornecida ao seu retorno de chamada não é hello.phpsenão a matriz de plug-ins atualmente ativos. Você não pode passar suas próprias variáveis ​​para retornos de chamada assim. A menos que você use variáveis ​​globais / de classe, será necessário usá-lo activate_plugin('hello.php');. Mas isso não deve ser um problema ...?
Stephen Harris

bem, eu não gosto de escrever as mesmas variáveis ​​em muitos lugares tbh. mas não é grande coisa. thx muito
Ünsal Korkmaz 03/09/12

2

Aqui está alguém explicando por que não estava funcionando para ele e como ele teve que copiar o método enable_plugin e criar um método personalizado sem o problema: /programming/1415958/how-to- ativar-wordpress-plugins-internamente

Aqui está a fonte original do código enable_plugin, que você pode usar para criar sua própria função e ver onde ela 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 plug-in que outra pessoa provavelmente desviou desse código-fonte: Como ativar plug-ins via código?


que a solução ainda não está funcionando em register_activation_hook
Ünsal Korkmaz

Felizmente, agora que você tem seu próprio método para ativar um plug-in, deve poder depurá-lo e descobrir onde está falhando, certo? :) Você mudou seu register_activation_hook para usar seu método customizado enable_plugin em vez do método padrão? Nesse caso, insira algumas instruções trigger_error e descubra onde está falhando. Por exemplo, um bom lugar para começar seria descobrir o que seu método está retornando quando falha.
mltsy

Eu tentei o meu melhor para depuração, mas não consegui encontrar o motivo. Talvez a opção active_plugins seja atualizada após a execução do register_activation_hook.
Ünsal Korkmaz 28/08/12

Desculpe, acabei de corrigir a ordem dos dois links que eu havia trocado (os dois últimos). Você está usando o código no link "Como ativar o plug-in via código?" Outra dica útil a ser fornecida seria o valor de retorno do activate_pluginmétodo padrão . Você pode usar trigger_errorpara encontrar o valor de retorno e publicá-lo aqui.
mltsy
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.