'simplet_display', 'post_status' => array( 'publish', 'draft', 'pending', 'private', 'future', 'trash' ), 'fields' => 'ids', 'numberposts' => -1, ) ); foreach ( $ids as $id ) { wp_delete_post( (int) $id, true ); } // Their screenshots: only this plugin's own folder in uploads. $uploads = wp_get_upload_dir(); $folder = trailingslashit( $uploads['basedir'] ) . 'simplet-display'; if ( is_dir( $folder ) ) { $items = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $folder, FilesystemIterator::SKIP_DOTS ), RecursiveIteratorIterator::CHILD_FIRST ); foreach ( $items as $item ) { if ( $item->isDir() && ! $item->isLink() ) { @rmdir( $item->getPathname() ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged, WordPress.WP.AlternativeFunctions.file_system_operations_rmdir -- this plugin's own folder. } else { wp_delete_file( $item->getPathname() ); } } @rmdir( $folder ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged, WordPress.WP.AlternativeFunctions.file_system_operations_rmdir -- this plugin's own folder. } foreach ( array( 'simplet_display_connection', 'simplet_display_status', 'simplet_display_state', 'simplet_display_index', 'simplet_display_slugs', 'simplet_display_cache_gen', 'simplet_display_last_note', 'simplet_display_version', 'widget_simplet_display', 'simplet_display_db', 'simplet_display_privacy', 'simplet_display_stats_sent', 'simplet_display_summary_sent', 'simplet_display_notes_refused', 'simplet_display_welcome', 'simplet_display_last_error', 'simplet_display_plain_headers', 'simplet_display_last_http', 'simplet_display_api_ns', 'simplet_display_site_fatal', 'simplet_display_speed_on', 'simplet_display_speed_log', 'seqwins_display_rebranded' ) as $option ) { delete_option( $option ); } // Viewers' records and the daily totals: this plugin's own tables. global $wpdb; foreach ( array( 'progress', 'viewers', 'counts', 'leads' ) as $table ) { // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange -- the plugin's own tables, on uninstall. $wpdb->query( $wpdb->prepare( 'DROP TABLE IF EXISTS %i', $wpdb->prefix . 'simplet_display_' . $table ) ); } // Which pages showed which SeqWins; when each admin last went to make one. delete_post_meta_by_key( '_simplet_display_uses' ); delete_metadata( 'user', 0, 'simplet_display_creating', '', true ); delete_metadata( 'user', 0, 'simplet_display_dismissed', '', true ); // The fast copies and short-lived markers, wherever they were kept. // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- one-off clean-up of this plugin's own transients. $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->options} WHERE option_name LIKE %s OR option_name LIKE %s", $wpdb->esc_like( '_transient_simplet_display_' ) . '%', $wpdb->esc_like( '_transient_timeout_simplet_display_' ) . '%' ) ); if ( function_exists( 'wp_cache_supports' ) && wp_cache_supports( 'flush_group' ) ) { wp_cache_flush_group( 'simplet_display' ); } } if ( is_multisite() ) { foreach ( get_sites( array( 'fields' => 'ids' ) ) as $simplet_display_site ) { switch_to_blog( (int) $simplet_display_site ); seqwins_display_uninstall_site(); restore_current_blog(); } } else { seqwins_display_uninstall_site(); }