Disabilita l'azione plugin / plugin tramite tema


19

Ho installato il plug- in Google Analyticator sul mio sito. Sto anche usando il plug-in MobilePress per offrire un tema progettato per browser mobili non smart-phone. Ho impostato Google Analytics per dispositivi mobili per l'utilizzo in questo tema e desidero disabilitare il plug-in Analyticator poiché include una chiamata a un file js più grande.

Qualcuno sa se è possibile disabilitare un plugin usando funzioni.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 interrompere le azioni per l'esecuzione? Ho provato a disabilitarli direttamente senza fortuna. Ecco il codice dal file del plugin:

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

Ho provato a rimuovere quelle azioni con:

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

Qualsiasi aiuto è molto apprezzato.


Per quanto mi riguarda questo dovrebbe funzionare tecnicamente, quindi c'è qualcosa nella tua tempistica di esecuzione di questo codice che va storto (troppo presto o troppo tardi). Si prega di fornire ulteriori informazioni.
Rarst

Sì, ho pensato che avrebbe funzionato pure. Non ho troppa esperienza con le azioni di aggiunta / rimozione, quindi non ero sicuro di come eseguirne il debug. Anche se la risposta di EAMann ha funzionato, che tipo di ulteriori informazioni stavi cercando?
PNMG

Sono un po 'confuso - non è più semplice disabilitare il plugin con mezzi normali se è necessario sparire per sempre? Quale risposta di EAMann fa solo per codice.
Supponevo

Ho un tema regolare che è impostato in wordpress per qualsiasi normale browser desktop. Per questo tema, voglio usare il plugin GA. Il plug-in mobilepress utilizza php per ottenere la stringa agente utente e offre un tema diverso a uno smartphone o a uno non smartphone. Volevo usare il file Functions.php per il tema non-smartphone per disabilitare il plugin GA dal mettere il JS nella <head> solo per quel tema. Deve ancora essere abilitato per gli altri due temi (desktop e smartphone). Questo aiuta a chiarire?
PNMG

Sì, è quello che ho pensato. Ma la disattivazione disabiliterà permanentemente il plug-in e rimarrà disattivata fino a quando non viene attivata esplicitamente. Non lo vedo adatto al tuo caso d'uso.
Rarst

Risposte:


25

Quando WordPress attiva un plug-in, chiama la activate_plugin()funzione. Questa funzione attiva il plugin in una sandbox e reindirizza altrove in caso di successo. È stato utilizzato da alcuni autori per attivare a livello di programmazione le dipendenze dei plugin.

C'è un'altra funzione, deactivate_plugin()che fa una cosa simile al contrario ... è in realtà come WordPress disattiva i plug-in quando si fa clic su "Disattiva" o "Disabilita".

Per disattivare un plug-in 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 di plugin da disabilitare) che consente di disabilitare i plugin senza chiamare hook di disattivazione. Per impostazione predefinita, è impostato su false e ti consiglio di lasciarlo così. A meno che per qualche motivo non si desideri ignorare la disattivazione, si dovrebbe fare:

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

Ciò disattiverebbe semplicemente il plug-in, ma non genererebbe nulla che il plug-in registrato effettuasse sulla disattivazione. Quindi, se il plug-in rimuove le opzioni o le tabelle db quando è disattivato, si vorrebbe fare questa disattivazione "silenziosa" per conservare quelle informazioni e usarle altrove.


Ottima risposta - e non solo rispetto ad un altro, diciamo, risposta "ecco un sito Web" poco brillante che potrebbe trovarsi da qualche parte nelle vicinanze.
editore

Questo codice, inserito in Functions.php disattiverà il plugin nell'amministratore disabilitandolo così dagli altri due temi. Grazie per averlo sottolineato. Volevo solo disabilitarlo per l'unico tema in cui si trovava il file Functions.php.
PNMG

Stai sempre usando un tema alla volta su un determinato sito ... ma se vuoi riattivare il plugin dopo aver disattivato il tema, è anche possibile.
EAMann,

11

Questo grazie alla brillante risposta di EAMann sopra, e ho pensato che potesse essere utile anche al poster 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 ho rilevato il suo stato con is_plugin_active e ho mostrato un messaggio di errore dell'amministratore per chiedere agli utenti di spegnerlo. Questo è MOLTO più liscio ...

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 sembra funzionare su register_activation_hook, ma admin_init funziona come un incantesimo.


1
Solo per notare che sono abbastanza sicuro che is_plugin_active sia già stato controllato nel hook di disattivate_plugins, quindi non dovrebbe aver bisogno di farlo di nuovo
Bryan Willis,

1

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

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

Invia questo alla produzione, abilitalo, quindi porta il database sul tuo computer di sviluppo locale.

fonte

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.