Installed Plugins. * Removes all plugin options and database tables so no data is left behind. */ if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) { exit; } global $wpdb; // Drop subscriber + broadcast tables. $ts_sub_tables = [ $wpdb->prefix . 'ts_sub_subscribers', $wpdb->prefix . 'ts_sub_broadcasts', ]; foreach ( $ts_sub_tables as $ts_sub_t ) { // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange, PluginCheck.Security.DirectDB.UnescapedDBParameter, PluginCheck.CodeAnalysis.Interpolation.NotPrepared $wpdb->query( "DROP TABLE IF EXISTS `$ts_sub_t`" ); } // Delete all plugin options. $ts_sub_options = [ 'ts_sub_db_version', 'ts_sub_theme', 'ts_sub_accent_override', 'ts_sub_popup_pages', 'ts_sub_popup_delay', 'ts_sub_popup_dismiss_days', 'ts_sub_popup_brand', 'ts_sub_popup_headline', 'ts_sub_popup_subhead', 'ts_sub_popup_button', 'ts_sub_popup_success_msg', 'ts_sub_notify_on_publish', 'ts_sub_from_email', 'ts_sub_default_skip_notify', 'ts_sub_default_skip_fsposter', ]; foreach ( $ts_sub_options as $ts_sub_o ) { delete_option( $ts_sub_o ); } // Delete any rate-limit transients. // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange, PluginCheck.Security.DirectDB.UnescapedDBParameter, PluginCheck.CodeAnalysis.Interpolation.NotPrepared $wpdb->query( "DELETE FROM `{$wpdb->options}` WHERE option_name LIKE '\\_transient\\_ts_sub\\_rl\\_%' OR option_name LIKE '\\_transient\\_timeout\\_ts_sub\\_rl\\_%'" ); // Delete per-post meta. // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared, WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange, PluginCheck.Security.DirectDB.UnescapedDBParameter, PluginCheck.CodeAnalysis.Interpolation.NotPrepared $wpdb->query( "DELETE FROM `{$wpdb->postmeta}` WHERE meta_key IN ('_ts_sub_notified', '_ts_sub_skip_notify', '_ts_sub_skip_fsposter')" );