Mit diesem Must Use Plugin kann man entweder alle oder einen Teil der Plugins gefahrlos im Live-Betrieb deaktivieren:
<?php
/* Plugins deaktivieren, wenn dev=secure_mode, außer für erlaubte */
if((isset($_GET['dev']) && $_GET['dev']=='secure_mode') || (isset($_COOKIE['dev']) && $_COOKIE['dev']=='secure_mode')) {
// Array von Plugin-Verzeichnisnamen, die NICHT deaktiviert werden sollen
$allowed_plugins = array(
'duplicate-post',
'loco-translate'
);
// Aktive Plugins filtern, um nur erlaubte einzuschließen
add_filter('option_active_plugins', function($plugins) use ($allowed_plugins) {
if (!is_array($plugins)) {
return array();
}
$filtered_plugins = array();
foreach ($plugins as $plugin) {
// Plugin-Verzeichnisname aus Plugin-Pfad extrahieren (z.B. 'plugin-dir/plugin-file.php' -> 'plugin-dir')
$plugin_dir = dirname($plugin);
if ($plugin_dir === '.' || in_array($plugin_dir, $allowed_plugins)) {
$filtered_plugins[] = $plugin;
}
}
return $filtered_plugins;
}, 1);
// Netzwerk-/seitenweite Plugins filtern, um nur erlaubte einzuschließen
add_filter('site_option_active_sitewide_plugins', function($plugins) use ($allowed_plugins) {
if (!is_array($plugins)) {
return array();
}
$filtered_plugins = array();
foreach ($plugins as $plugin => $activation_time) {
// Plugin-Verzeichnisname aus Plugin-Pfad extrahieren
$plugin_dir = dirname($plugin);
if ($plugin_dir === '.' || in_array($plugin_dir, $allowed_plugins)) {
$filtered_plugins[$plugin] = $activation_time;
}
}
return $filtered_plugins;
}, 1);
}
Der PHP-Code wird in /wp-content/mu-plugins/disable-plugins.php gesichert und mit dev=secure_mode als GET oder POST aktiviert.