Disabilitare plugin / azione del plugin tramite tema

15 mar 2011, 23:36:26
Visualizzazioni: 42.5K
Voti: 27

Ho installato il plugin Google Analyticator sul mio sito. Sto anche utilizzando il plugin MobilePress per fornire un tema progettato per browser mobile non-smartphone. Ho configurato Google Analytics per Mobile per l'utilizzo in questo tema e vorrei disabilitare il plugin Analyticator poiché include una chiamata a un file js più pesante.

Qualcuno sa se è possibile disabilitare un plugin utilizzando functions.php o qualche altro metodo?

Credo di aver individuato il codice che aggiunge le funzioni alla pagina, quindi se non è possibile disabilitare l'intero plugin, è possibile impedire l'esecuzione delle azioni? Ho provato a disabilitarle direttamente senza successo. Ecco il codice dal file del plugin:

// Aggiunge l'analisi di Google
add_action('wp_head', 'add_google_analytics', 999999);
// Inizializza il tracciamento dei link in uscita
add_action('init', 'ga_outgoing_links');

Ho provato a rimuovere queste azioni con:

// Rimuove l'analisi di Google
remove_action('wp_head','add_google_analytics',9999999);
// Rimuove il tracciamento dei link in uscita
remove_action('init', 'ga_outgoing_links');

Qualsiasi aiuto è molto apprezzato.

9
Commenti

Per quanto mi riguarda, tecnicamente dovrebbe funzionare, quindi c'è qualcosa riguardo al timing di esecuzione di questo codice che non va (troppo presto o troppo tardi). Per favore fornisci maggiori informazioni.

Rarst Rarst
15 mar 2011 23:49:36

Sì, pensavo che avrebbe funzionato anche a me. Non ho molta esperienza con add/remove actions quindi non ero sicuro di come debuggarne ulteriormente. Anche se la risposta di EAMann ha funzionato, che tipo di informazioni stavi cercando?

PNMG PNMG
16 mar 2011 00:29:23

Sono leggermente confuso - non sarebbe più semplice disabilitare il plugin tramite i metodi normali se deve essere rimosso definitivamente? La risposta di EAMann fa esattamente questo via codice. Avevo capito che volessi disabilitarlo dinamicamente in base a qualche condizione...

Rarst Rarst
16 mar 2011 00:33:02

Ho un tema regolare impostato in WordPress per qualsiasi normale browser desktop. Per questo tema, voglio utilizzare il plugin GA. Il plugin MobilePress utilizza PHP per ottenere la stringa user-agent e serve un tema diverso per smartphone o non-smartphone. Volevo usare il file functions.php per il tema non-smartphone per disabilitare il plugin GA dall'inserimento del JS nell'<head> solo per quel tema. Deve rimanere abilitato per gli altri due temi (desktop e smartphone). Questo chiarisce la situazione?

PNMG PNMG
16 mar 2011 01:42:32

Sì, è quello che pensavo. Ma la disattivazione disabiliterà il plugin in modo persistente e rimarrà spento finché non verrà riattivato esplicitamente. Non credo si adatti al tuo caso d'uso.

Rarst Rarst
16 mar 2011 02:09:05

Ahhhh! Hai ragione. Era la fine della giornata e ho visto che lo rimuoveva dal tema da cui volevo rimuoverlo, ma non ho controllato gli altri. Ha semplicemente disattivato il plugin per tutto. Quindi immagino che la risposta qui sotto non sia quella che cercavo. Grazie per avermi aiutato a capirlo! Pensi che seguire il codice remove_action sia la strada da percorrere? Non sembra possibile disabilitare un plugin solo per un tema.

PNMG PNMG
16 mar 2011 03:15:38

Sì, le rimozioni dovrebbero essere appropriate. Esattamente quando e come esegui le funzioni di rimozione?

Rarst Rarst
16 mar 2011 10:31:24

Ho posizionato i remove_action alla fine del file functions.php del tema. Li ho messi da soli in modo simile a come ho indicato nella domanda e ho anche provato a inserirli in un add_action: add_action('wp_head','my_remove_ga'); function my_remove_ga() { remove_action('wp_head','add_google_analytics'); remove_action('init', 'ga_outgoing_links'); } Ho anche provato a fare var_dump() del remove_action usando var_dump(remove_action('wp_head','add_google_analytics')); e restituisce bool(false) che secondo il codex significa "La funzione non può essere rimossa."

PNMG PNMG
16 mar 2011 14:21:31

Ho anche provato a commentare gli add_action iniziali del plugin e ad aggiungerli al functions.php del mio tema, poi usando i remove_action direttamente sotto. Nemmeno questo sembra funzionare.

PNMG PNMG
16 mar 2011 14:29:01
Mostra i restanti 4 commenti
Tutte le risposte alla domanda 4
3
35

Quando WordPress attiva un plugin, chiama la funzione activate_plugin(). Questa funzione attiva il plugin in una sandbox e reindirizza altrove in caso di successo. È stata utilizzata da alcuni autori per attivare le dipendenze dei plugin in modo programmatico.

C'è un'altra funzione, deactivate_plugins(), che fa una cosa simile al contrario... è in realtà il modo in cui WordPress disattiva i plugin quando si clicca su "disattiva" o "disabilita".

Per disattivare un plugin installato, basta chiamare:

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

Oppure, per disattivare più plugin contemporaneamente:

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

C'è un secondo parametro (il primo è una stringa o un array dei plugin da disabilitare) che consente di disabilitare i plugin senza chiamare gli hook di disattivazione. Di default, è impostato su false, e ti consiglio di lasciarlo così. A meno che, per qualche motivo, tu non voglia bypassare la disattivazione, in quel caso faresti:

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

Questo semplicemente spegne il plugin, ma non attiva nulla di ciò che il plugin ha registrato per fare alla disattivazione. Quindi, se il plugin rimuove opzioni o tabelle del database quando viene disattivato, potresti voler fare questa disattivazione "silenziosa" per preservare quelle informazioni e utilizzarle altrove.

15 mar 2011 23:53:35
Commenti

Ottima risposta - e non solo rispetto a un'altra, diciamo, risposta poco brillante del tipo "ecco un sito web" che potrebbe trovarsi da qualche parte nelle vicinanze.

editor editor
15 mar 2011 23:59:06

Questo codice, inserito nel functions.php disattiverà il plugin nell'area amministrativa, disabilitandolo così per gli altri due temi. Grazie a Rarst per averlo fatto notare. Io volevo solo disabilitarlo per il tema in cui si trovava il file functions.php.

PNMG PNMG
16 mar 2011 03:19:21

Su un dato sito usi sempre un solo tema alla volta... ma se vuoi riattivare il plugin dopo aver disattivato il tema, anche questo è possibile.

EAMann EAMann
21 mar 2011 16:35:40
1
14

Questo è grazie alla brillante risposta di EAMann sopra, e ho pensato che potrebbe essere utile anche all'autore del post originale...

Avevo bisogno di una soluzione per assicurarmi che gli utenti disattivassero il mio plugin se caricavano la versione premium (per evitare potenziali conflitti). In precedenza rilevavo il suo stato con is_plugin_active e mostravo un messaggio di errore nell'admin per invitare gli utenti a disattivarlo. Questa soluzione è MOLTO più fluida...

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: Non sembrava funzionare con register_activation_hook, ma admin_init funziona perfettamente.

20 mar 2012 14:24:27
Commenti

Da notare che sono abbastanza sicuro che is_plugin_active sia già verificato nell'hook deactivate_plugins, quindi non dovrebbe essere necessario farlo di nuovo

Bryan Willis Bryan Willis
11 set 2014 07:24:37
0

Ecco la mia soluzione, crea un plugin che può disabilitare altri plugin in questo modo:

/*
 * Plugin Name: Disabilita/Configura Plugin
 * Description: Ti permette di disabilitare/configurare plugin basandoti su variabili d'ambiente
 * Author:      Chris Sewell
 */

/**
 * Disabilita i plugin specificati nell'ambiente di sviluppo.
 * 
 * Questo è un plugin "Must-Use". Il codice qui viene caricato automaticamente prima dei plugin regolari.
 * Questo è l'unico posto da cui è possibile disabilitare programmaticamente i plugin regolari.
 * 
 * Posiziona questo codice in un file in WP_CONTENT_DIR/mu-plugins o specifica una posizione personalizzata

 * su "development" o "production" in ogni specifico server/ambiente.
 */

/* Disabilita i plugin specificati nell'ambiente di sviluppo */
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);
}

Porta questo in produzione, abilitalo, poi porta il database giù sulla tua macchina di sviluppo locale.

Fonte

26 set 2017 12:48:06
0

Se vuoi disabilitare temporaneamente un plugin in base a una condizione senza disattivarlo persistentemente per tutti i clienti (come fa deactivate_plugins()), dovresti utilizzare il filtro option_active_plugins in un plugin all'interno della cartella mu-plugins come mostrato nell'esempio seguente:

# file: wp-content/mu-plugins/disable-plugins.php

add_filter( 'option_active_plugins', function( $plugins ){
    if ( $my_condition ) {
        $plugins = array_diff($plugins, array('plugin_to_rm_1.php', 'plugin_to_rm_2.php'));    
    }
    return $plugins;
});
20 dic 2023 15:35:01