'UpdraftPlus', 'backwpup/backwpup.php' => 'BackWPup', 'backup-backup/backup-backup.php' => 'Backup Migration', 'duplicator/duplicator.php' => 'Duplicator', 'wpvivid-backuprestore/wpvivid-backuprestore.php' => 'WPvivid', 'all-in-one-wp-migration/all-in-one-wp-migration.php' => 'All-in-One WP Migration', 'blogvault-real-time-backup/blogvault.php' => 'BlogVault', 'jetpack/jetpack.php' => 'Jetpack (VaultPress)', 'solid-backups/backupbuddy.php' => 'Solid Backups', 'backupbuddy/backupbuddy.php' => 'BackupBuddy', 'wp-time-capsule/wp-time-capsule.php' => 'WP Time Capsule', ]; $found = []; foreach ($known as $file => $label) { if (isset($plugins[$file])) { $found[$file] = [ 'label' => $label, 'active' => is_plugin_active($file), ]; } } $f = []; if (empty($found)) { $f[] = $this->finding( 'no_backup_plugin', 'bad', 'No recognised backup plugin installed', '', 'None of the common backup plugins were detected. Confirm host-side backups instead, or install one.' ); return $f; } $any_active = false; foreach ($found as $file => $meta) { if ($meta['active']) $any_active = true; $f[] = $this->finding( 'plugin_' . sanitize_key($file), $meta['active'] ? 'ok' : 'warn', $meta['label'], $meta['active'] ? 'active' : 'installed but inactive', '' ); } if (!$any_active) { $f[] = $this->finding( 'no_active', 'bad', 'No backup plugin is active', '', 'A backup plugin is installed but not active — activate before proceeding.' ); } // UpdraftPlus — surface last backup timestamp if available. if (isset($found['updraftplus/updraftplus.php'])) { $last = get_option('updraft_last_backup'); if (is_array($last) && !empty($last['backup_time'])) { $age_days = floor((time() - (int) $last['backup_time']) / DAY_IN_SECONDS); $level = $age_days > 7 ? 'warn' : 'ok'; $f[] = $this->finding( 'updraft_last', $level, 'UpdraftPlus — last backup', date('Y-m-d H:i', (int) $last['backup_time']), $age_days . ' day(s) ago' . (!empty($last['backup_nonce']) ? '. Nonce ' . substr((string) $last['backup_nonce'], 0, 8) : '') ); } } return $f; } };