Dezactivare plugin / acțiune plugin prin intermediul temei
Am instalat pluginul Google Analyticator pe site-ul meu. De asemenea, folosesc pluginul MobilePress pentru a afișa o temă destinată browserelor mobile non-smartphone. Am configurat Google Analytics pentru Mobile pentru utilizare în această temă și aș dori să dezactivez pluginul Analyticator deoarece include un apel către un fișier js mai mare.
Știe cineva dacă este posibil să dezactivezi un plugin folosind functions.php sau vreo altă metodă?
Cred că am localizat codul care adaugă funcțiile în pagină, așa că dacă nu este posibil să dezactivez întregul plugin, este posibil să opresc execuția acțiunilor? Am încercat să le dezactivez direct dar fără succes. Iată codul din fișierul plugin-ului:
add_action('wp_head', 'add_google_analytics', 999999);
add_action('init', 'ga_outgoing_links');
Am încercat să elimin aceste acțiuni cu:
remove_action('wp_head','add_google_analytics',9999999);
remove_action('init', 'ga_outgoing_links');
Orice ajutor este apreciat.

Când WordPress activează un plugin, apelează funcția activate_plugin()
. Această funcție activează pluginul într-un mediu izolat (sandbox) și redirecționează în altă parte în caz de succes. Unii autori au folosit-o pentru a activa programatic dependințele pluginurilor.
Există o altă funcție, deactivate_plugins()
, care face același lucru, dar în sens invers... de fapt, asta folosește WordPress atunci când dai clic pe "dezactivează" sau "oprește".
Pentru a dezactiva un plugin instalat, apelează:
deactivate_plugins( '/plugin-folder/plugin-name.php' );
Sau, pentru a dezactiva mai multe pluginuri simultan:
deactivate_plugins( array( '/first-plugin/first.php', '/second-plugin/second.php' ) );
Există un al doilea parametru (primul fiind fie un șir de caractere, fie un array cu pluginurile de dezactivat) care permite dezactivarea fără a apela hook-urile de dezactivare. În mod implicit, este setat la false, și recomand să-l lași așa. Doar dacă vrei să ocolesc procesul de dezactivare, atunci ai putea face:
deactivate_plugins( '/plugin-folder/plugin-name.php', true );
Asta ar opri doar pluginul, dar nu ar declanșa acțiunile înregistrate la dezactivare. Deci, dacă pluginul elimină opțiuni sau tabele din baza de date când este dezactivat, ai putea folosi această dezactivare "silențioasă" pentru a păstra acele informații și a le utiliza în altă parte.
- Documentație suplimentară de la A HitchHacker's Guide through WordPress

Răspuns excelent -- și nu doar în comparație cu un alt răspuns, să zicem, mai slab, de genul „uite un site web” care ar putea fi pe undeva în apropiere.

Acest cod, plasat în functions.php, va dezactiva pluginul în panoul de administrare, dezactivându-l astfel pentru celelalte două teme. Mulțumesc Rarst pentru observație. Eu voiam doar să îl dezactivez pentru tema unde se afla fișierul functions.php.

Aceasta este grație răspunsului strălucit al lui EAMann mai sus și am crezut că ar putea fi util și pentru autorul inițial al postării...
Am avut nevoie de o soluție pentru a mă asigura că utilizatorii dezactivează plugin-ul meu dacă încarcă versiunea premium (pentru a evita potențiale conflicte). Anterior, detectam starea acestuia cu is_plugin_active
și afișam un mesaj de eroare în administrare pentru a-i îndemna pe utilizatori să-l oprească. Această soluție este MULT mai elegantă...
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' );
Notă: Nu părea să funcționeze pe register_activation_hook
, dar admin_init
funcționează perfect.

Iată soluția mea, creează un plugin care poate dezactiva alte plugin-uri astfel:
/*
* Plugin Name: Dezactivează/Configurează Plugin-uri
* Description: Îți permite să dezactivezi/configurezi plugin-uri bazat pe variabile de mediu
* Author: Chris Sewell
*/
/**
* Dezactivează plugin-uri specificate în mediul de dezvoltare.
*
* Acesta este un plugin "Must-Use". Codul de aici este încărcat automat înainte de încărcarea plugin-urilor obișnuite.
* Acesta este singurul loc de unde plugin-urile obișnuite pot fi dezactivate programatic.
*
* Plasează acest cod într-un fișier în WP_CONTENT_DIR/mu-plugins sau specifică o locație personalizată
* la "development" sau "production" în fiecare server/mediu particular.
*/
/* Dezactivează plugin-uri specificate în mediul de dezvoltare */
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);
}
Implementează acest cod în producție, activează-l, apoi adu baza de date pe mașina ta locală de dezvoltare.

Dacă dorești să dezactivezi temporar un plugin în funcție de o anumită condiție, fără a-l dezactiva permanent pentru toți clienții (așa cum face deactivate_plugins()
), ar trebui să utilizezi filtrul option_active_plugins
într-un plugin din directorul mu-plugins
, conform exemplului de mai jos:
# fișier: 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;
});
