query( $wpdb->prepare( 'DELETE FROM %i WHERE created_gmt < %s LIMIT 2000', Installer::table(), $cutoff ) ); $deleted = (int) $wpdb->rows_affected; $total += $deleted; if ( $deleted < 2000 ) { break; } } do_action( 'srah_pruned', $total, $days ); return $total; } /** * Delete every event on the current site. * * @return int */ public static function delete_all() { global $wpdb; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- the plugin's own events table has no WordPress API; journal reads must be live. $wpdb->query( $wpdb->prepare( 'DELETE FROM %i WHERE blog_id = %d', Installer::table(), get_current_blog_id() ) ); return (int) $wpdb->rows_affected; } /** * Delete specific events on the current site. * * @param int[] $ids Event IDs. * @return int */ public static function delete_ids( array $ids ) { global $wpdb; $ids = array_values( array_filter( array_map( 'absint', $ids ) ) ); $ids = array_slice( $ids, 0, 100 ); if ( ! $ids ) { return 0; } $deleted = 0; foreach ( $ids as $id ) { // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- the plugin's own events table has no WordPress API; journal reads must be live. $wpdb->query( $wpdb->prepare( 'DELETE FROM %i WHERE blog_id = %d AND id = %d', Installer::table(), get_current_blog_id(), $id ) ); $deleted += (int) $wpdb->rows_affected; } return $deleted; } }