Disabilitare plugin / azione del plugin tramite tema
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.

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.
- Alcuna documentazione dalla Guida di un HitchHacker attraverso WordPress

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.

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.

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.

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.

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