prefix . 'aimention_events'; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange -- custom table teardown on uninstall. $wpdb->query( $wpdb->prepare( 'DROP TABLE IF EXISTS %i', $aimention_vis_table ) ); foreach ( array( 'aimention_vis_key', 'aimention_vis_endpoint', 'aimention_vis_proxy', 'aimention_vis_proxy_header', 'aimention_vis_proxy_ranges', 'aimention_directory_snapshot', ) as $aimention_vis_opt ) { delete_option( $aimention_vis_opt ); } // Overview transients are per host+key, so clear by prefix. $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_aimention_vis_overview_%' OR option_name LIKE '_transient_timeout_aimention_vis_overview_%'" ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- one-off cleanup on uninstall. wp_clear_scheduled_hook( 'aimention_vis_process' ); wp_clear_scheduled_hook( 'aimention_vis_refresh_directory' );