Borrar). * * Borra las opciones, transients y tareas programadas del plugin y su bloque del .htaccess. Si el * add-on ARACNE Pro sigue instalado se conservan las opciones compartidas que necesita (instancia, * URL del servicio, interruptores y modo experto): sin ellas perdería la activación de su licencia. */ if (!defined('WP_UNINSTALL_PLUGIN')) exit; require_once __DIR__ . '/includes/class-hardening.php'; /** ¿Queda instalado el add-on Pro (en cualquier carpeta)? */ function aracne_uninstall_pro_present() { if (!function_exists('get_plugins')) require_once ABSPATH . 'wp-admin/includes/plugin.php'; foreach (array_keys(get_plugins()) as $basename) { if (basename($basename) === 'aracne-pro.php') return true; } return false; } function aracne_uninstall_site($keep_shared) { foreach (['aracne_hardening', 'aracne_onboarded', 'aracne_telemetry_optin'] as $opt) { delete_option($opt); } foreach (['aracne_scan_cache', 'aracne_phonehome_sent'] as $t) { delete_transient($t); } wp_clear_scheduled_hook('aracne_phonehome'); if ($keep_shared) { $mods = get_option('aracne_simple_modules'); if (is_array($mods)) { unset($mods['hardening']); update_option('aracne_simple_modules', $mods); } return; } foreach (['aracne_simple_modules', 'aracne_expert_mode', 'aracne_license_api', 'aracne_license_instance'] as $opt) { delete_option($opt); } } $aracne_keep_shared = aracne_uninstall_pro_present(); if (is_multisite()) { foreach (get_sites(['fields' => 'ids', 'number' => 0]) as $aracne_site) { switch_to_blog($aracne_site); aracne_uninstall_site($aracne_keep_shared); restore_current_blog(); } } else { aracne_uninstall_site($aracne_keep_shared); } ARACNE_Hardening::htaccess_remove_block(ABSPATH . '.htaccess');