query( 'DROP TABLE IF EXISTS `' . esc_sql( $wpdb->prefix . $tidelist_table ) . '`' ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange, WordPress.DB.PreparedSQL.NotPrepared -- own table, name built from the prefix and a fixed list. } // Options. foreach ( array( 'tidelist_settings', 'tidelist_db_version', 'tidelist_user_tokens', 'tidelist_client_tokens', 'tidelist_account', 'tidelist_batch', 'tidelist_batch_lock', 'tidelist_takedown_attempts', 'tidelist_update_attempts', 'tidelist_onboarded', 'tidelist_previewed', 'tidelist_rate_guard', ) as $tidelist_option ) { delete_option( $tidelist_option ); } // Anything else the plugin stored (transients, per-product choices). $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '\\_transient\\_tidelist\\_%' OR option_name LIKE '\\_transient\\_timeout\\_tidelist\\_%'" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- fixed pattern. $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE meta_key = '_tidelist_ask'" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- fixed key. // Scheduled jobs. if ( function_exists( 'as_unschedule_all_actions' ) ) { foreach ( array( 'tidelist_daily', 'tidelist_takedown_check', 'tidelist_takedown_sweep', 'tidelist_update_listing', 'tidelist_relist_listing', 'tidelist_status_poll', 'tidelist_load_categories', 'tidelist_publish_one' ) as $tidelist_hook ) { as_unschedule_all_actions( $tidelist_hook ); } }