render_addon_screen( __( 'Malware scanner', 'guardforge' ), __( 'Heuristics + signature-based scanning across wp-content. Available with GuardForge Pro.', 'guardforge' ), 'malware_scanner' ); return; } // The persisted run history, not the transient: a transient can be evicted // (no persistent object cache, a cache flush, or simply the day passing) and // used to leave this screen unable to tell "never run" from "ran yesterday, // forgotten now". GUARDFORGE_Malware_Scanner::history is the durable record; // see its class docblock. $guardforge_last = GUARDFORGE_Malware_Scanner::last_run(); $guardforge_ext_list = implode( ', ', GUARDFORGE_Malware_Scanner::SCANNED_EXTENSIONS ); $guardforge_last_skip = $guardforge_last['skipped'] ?? []; $guardforge_last_err = $guardforge_last['errors'] ?? []; $guardforge_last_err_n = array_sum( $guardforge_last_err ); ?>
✓


$guardforge_sigs ) : ?>
0 ) : ?>
✓
⚠