Desativar ação de plug-in / plug-in por tema


19

Eu instalei o plug - in do Google Analyticator no meu site. Também estou usando o plug - in MobilePress para exibir um tema projetado para navegadores de celular que não são smartphones. Configurei o Google Analytics para celular para uso neste tema e gostaria de desativar o plug-in do 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 desativar 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 de plug-in:

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

Tentei remover essas ações com:

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

Qualquer ajuda é muito apreciada.


Quanto a mim, isso deve estar funcionando tecnicamente; portanto, há alguma coisa sobre o tempo de execução desse código que der errado (muito cedo ou muito tarde). Forneça mais informações.
— Rarst

Sim, eu pensei que iria funcionar também. Não tenho muita experiência com ações de adição / remoção, por isso não tinha certeza de como depurar mais. Embora a resposta da EAMann tenha funcionado, que tipo de informação você estava procurando?
— PNMG 15/03

Estou um pouco confuso - não é mais fácil desabilitar o plug-in por meios normais, se ele precisar desaparecer definitivamente? Qual resposta da EAMann faz apenas por código. Eu achei que você queria-lo dinamicamente com deficiência em alguma condição ...
— Rarst

Eu tenho um tema regular que é definido no wordpress para qualquer navegador de desktop normal. Para esse tema, quero usar o plug-in do GA. O plug-in mobilepress usa php para obter a string user-agent e serve um tema diferente para um telefone inteligente ou um telefone não-inteligente. Eu queria usar o arquivo functions.php para o tema de telefones não inteligentes para desativar o plug-in do GA colocando o JS na <head> apenas para esse tema. Ele ainda precisa estar ativado para os outros dois temas (desktop e smartphone). Isso ajuda a esclarecer?
— PNMG 15/03

Sim, foi o que pensei. Mas a desativação apenas desativará o plug-in persistentemente e permanecerá desativada até ser ativada explicitamente. Não acho que seja adequado ao seu caso de uso.
— Rarst 16/03/2019

Respostas:


25

Quando o WordPress ativa um plug-in, ele chama a activate_plugin()função Essa função ativa o plug-in em uma sandbox e redireciona para outro lugar com sucesso. Ele foi usado por alguns autores para ativar programaticamente dependências de plugins.

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

Para desativar um plug-in instalado, basta ligar para:

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

Ou, para desativar vários plugins de uma vez:

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

Há um segundo parâmetro (o primeiro é uma sequência de caracteres 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 false, e eu recomendo que você deixe assim. A menos que, por algum motivo, você queira ignorar a desativação, faça:

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

Isso 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 db quando estiver desativado, faça essa desativação "silenciosa" para preservar essas informações e usá-las em outros lugares.


Ótima resposta - e não apenas comparada a outra, digamos, resposta sem brilho "aqui está um site" que pode estar em algum lugar próximo.
— editor de

Esse código, colocado no functions.php, desativará o plug-in no administrador, desativando-o dos outros dois temas. Obrigado Rarst por apontar isso. Eu estava querendo apenas desativá-lo para o tema em que o arquivo functions.php estava localizado.
— PNMG

Você está sempre usando um tema de cada vez em um determinado site ... mas se você deseja reativar o plug-in depois de desativar o tema, isso também é possível.
— EAMann

11

Isso se deve à brilhante resposta de EAMann acima, e achei que também poderia ser útil para o pôster original ...

Eu precisava de uma solução para garantir que os usuários desativassem meu plug-in se eles fizessem o upload da versão premium (para evitar possíveis conflitos). Anteriormente, eu detectei seu estado com is_plugin_active e mostrei uma mensagem de erro de administrador para solicitar aos usuários que o desligassem. 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: Não parecia funcionar no register_activation_hook, mas o admin_init funciona como um encanto.


11
Apenas a nota eu tenho certeza is_plugin_active já está marcada no gancho deactivate_plugins por isso não precisa fazê-lo novamente
— Bryan Willis

1

Aqui está a minha solução, crie um plug-in que pode desativar outros plugins, como:

/*
 * 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 produção, ative-o e traga o banco de dados para a máquina de desenvolvimento local.

Fonte

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.