prefix . 'pulbeat_buckets'; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange -- removing the plugin's own table on uninstall. $wpdb->query( $wpdb->prepare( 'DROP TABLE IF EXISTS %i', $pulbeat_table ) ); delete_option( 'pulbeat_site_salt' ); delete_option( 'pulbeat_db_version' ); delete_option( 'pulbeat_pruned_at' ); delete_option( 'pulbeat_keys' ); // Site keys and connection state (Pulbeat_Keys::OPTION). // Replay-protection nonces and the connection lock (Pulbeat_Once::PREFIX), admin notice transients. // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- bulk removal of the plugin's own options by prefix; no WordPress API for this. $wpdb->query( $wpdb->prepare( 'DELETE FROM %i WHERE option_name LIKE %s OR option_name LIKE %s OR option_name LIKE %s', $wpdb->options, $wpdb->esc_like( '_pulbeat_once_' ) . '%', $wpdb->esc_like( '_transient_pulbeat_notice_' ) . '%', $wpdb->esc_like( '_transient_timeout_pulbeat_notice_' ) . '%' ) ); } if ( is_multisite() ) { foreach ( get_sites( array( 'fields' => 'ids', 'number' => 0 ) ) as $pulbeat_site_id ) { switch_to_blog( (int) $pulbeat_site_id ); pulbeat_uninstall_site(); restore_current_blog(); } } else { pulbeat_uninstall_site(); }