prefix . 'prautoblogger_'; $tables = array( $prefix . 'source_data', $prefix . 'analysis_results', $prefix . 'generation_log', $prefix . 'content_scores', $prefix . 'event_log', ); foreach ( $tables as $table ) { // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared -- Table names are hardcoded above, not user input. $wpdb->query( "DROP TABLE IF EXISTS {$table}" ); } /* |-------------------------------------------------------------------------- | 2. Delete All Plugin Options |-------------------------------------------------------------------------- */ $options = $wpdb->get_col( "SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE 'prautoblogger\_%'" ); foreach ( $options as $option ) { delete_option( $option ); } /* |-------------------------------------------------------------------------- | 3. Delete All Plugin Post Meta |-------------------------------------------------------------------------- */ $wpdb->query( "DELETE FROM {$wpdb->postmeta} WHERE meta_key LIKE '\\_prautoblogger\\_%'" ); /* |-------------------------------------------------------------------------- | 4. Delete All Plugin Transients |-------------------------------------------------------------------------- */ $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '\\_transient\\_prautoblogger\\_%' OR option_name LIKE '\\_transient\\_timeout\\_prautoblogger\\_%'" ); /* |-------------------------------------------------------------------------- | 5. Clear Any Remaining Cron Events |-------------------------------------------------------------------------- */ $hooks = array( 'prautoblogger_daily_generation', 'prautoblogger_collect_metrics', ); foreach ( $hooks as $hook ) { $timestamp = wp_next_scheduled( $hook ); if ( false !== $timestamp ) { wp_unschedule_event( $timestamp, $hook ); } }