Desativar a ação plugin / plugin via tema

13

Eu instalei o plug-in do Google Analyticator em meu site. Também estou usando o plug-in do MobilePress para veicular um tema criado para navegadores móveis que não são smartphones. Eu configurei o Google Analytics para celular para uso neste tema e gostaria de desativar o Plugin Analyticator, pois inclui uma chamada para um arquivo js maior.

Alguém sabe se é possível desativar um plugin usando o functions.php ou algum outro método?

Acredito que localizei o código que adiciona as funções à página, portanto, se não for possível desabilitar todo o plug-in, é possível interromper as ações para execução? Eu tentei desativá-los diretamente sem sorte. Aqui está o código do arquivo do plugin:

add_action('wp_head', 'add_google_analytics', 999999);
add_action('init', 'ga_outgoing_links');

Eu tentei remover essas ações com:

remove_action('wp_head','add_google_analytics',9999999);
remove_action('init', 'ga_outgoing_links');

Qualquer ajuda é muito apreciada.

    
por PNMG 15.03.2011 / 22:36

3 respostas

21

Quando o WordPress ativa um plugin, ele chama a função activate_plugin() . Essa função ativa o plug-in em um sandbox e redireciona para outro lugar em caso de sucesso. Ele tem sido usado por alguns autores para ativar programaticamente as dependências de plug-ins.

Existe outra função, deactivate_plugin() , que faz uma coisa semelhante ao contrário ... na verdade, é como o WordPress desativa os plug-ins quando você clica em "desativar" ou "desativar".

Para desativar um plugin instalado, basta ligar:

deactivate_plugins( '/plugin-folder/plugin-name.php' );

Ou, para desativar vários plug-ins de uma só vez:

deactivate_plugins( array( '/first-plugin/first.php', '/second-plugin/second.php' ) );

Há um segundo parâmetro (o primeiro é uma string ou uma matriz dos plug-ins a serem desativados) que permite desativar os plug-ins sem chamar ganchos de desativação. Por padrão, está definido como falso e eu recomendo que você o deixe dessa maneira. A menos que, por algum motivo, você queira ignorar a desativação, faça o seguinte:

deactivate_plugins( '/plugin-folder/plugin-name.php', true );

Isso apenas desativaria o plug-in, mas não dispararia nada que o plug-in registrado fizesse na desativação. Portanto, se o plug-in remover opções ou tabelas do banco de dados quando estiver desativado, você poderá fazer essa desativação "silenciosa" para preservar essas informações e usá-las em outro lugar.

por EAMann 15.03.2011 / 22:53
11

Isto é graças à brilhante resposta de EAMann acima, e eu pensei que poderia ser útil para o pôster original também ...

Eu precisava de uma solução para garantir que os usuários desativassem meu plug-in se enviassem a versão premium (para evitar possíveis conflitos). Anteriormente, detectei seu estado com is_plugin_active e mostrei uma mensagem de erro de administrador para solicitar que os usuários o desativassem. Isso é MUITO mais suave ...

function deactivate_plugin_conditional() {
    if ( is_plugin_active('plugin-folder/plugin-name.php') ) {
    deactivate_plugins('plugin-folder/plugin-name.php');    
    }
}
add_action( 'admin_init', 'deactivate_plugin_conditional' );

Nota: parece não funcionar em register_activation_hook, mas admin_init funciona como um encanto.

    
por Mark Jeldi 20.03.2012 / 13:24
1

Aqui está a minha solução, crie um plugin que pode desativar outros plugins da seguinte forma:

/*
 * Plugin Name: Disable/Configure Plugins
 * Description: Lets you disable/configure plugins based on environment variables
 * Author:      Chris Sewell
 */

/**
 * Disable specified plugins in development environment.
 * 
 * This is a "Must-Use" plugin. Code here is loaded automatically before regular plugins load.
 * This is the only place from which regular plugins can be disabled programatically.
 * 
 * Place this code in a file in WP_CONTENT_DIR/mu-plugins or specify a custom location 

 * to "development" or "production" in each particular server/environment.
 */

/* Disable specified plugins in development environment */
if (((getenv('environment') == 'production') || (getenv('environment') == 'alpha')) == false) {
    $plugins = array(
        'w3-total-cache/w3-total-cache.php'
    );
    require_once(ABSPATH . 'wp-admin/includes/plugin.php');
    deactivate_plugins($plugins);
}

Envie isso para a produção, habilite-o e, em seguida, coloque o banco de dados em sua máquina local de desenvolvimento.

Fonte

    
por user128526 26.09.2017 / 11:48