query( $wpdb->prepare( 'DROP TABLE IF EXISTS %i', $wpdb->prefix . 'edrad_events' ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange -- Plugin-owned forensic tables have no higher-level WordPress object API; values use typed wpdb operations/prepared queries. Live forensic state must reflect current captures and flood counts; no persistent result cache is used. Explicit uninstall cleanup of plugin-owned tables, gated by WP_UNINSTALL_PLUGIN and the remove-on-uninstall setting. $wpdb->query( $wpdb->prepare( 'DROP TABLE IF EXISTS %i', $wpdb->prefix . 'edrad_capsules' ) ); delete_option( 'edrad_last_fingerprint' ); delete_option( 'edrad_version' ); delete_option( 'edrad_settings' ); delete_option( 'edrad_incident_classifications' ); delete_option( 'edrad_recovery_delivery_failed' ); } wp_clear_scheduled_hook( 'edrad_daily_maintenance' );