query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '\_transient\_aiq\_%' OR option_name LIKE '\_transient\_timeout\_aiq\_%'" ); // Per-user dismissal flag. delete_metadata( 'user', 0, 'accessiq_upgrade_notice_dismissed', '', true ); // Custom tables. $tables = array( 'issues', 'clicks', 'sessions', 'dashboard', 'page_views' ); foreach ( $tables as $table ) { // phpcs:ignore WordPress.DB.DirectDatabaseQuery,WordPress.DB.PreparedSQL.NotPrepared,WordPress.DB.PreparedSQL.InterpolatedNotPrepared $wpdb->query( 'DROP TABLE IF EXISTS `' . esc_sql( $wpdb->prefix . 'accessiq_' . $table ) . '`' ); } // Scan CPT posts and their meta, in batches (a site can hold thousands). do { $ids = get_posts( array( 'post_type' => 'accessiq_scan', 'post_status' => 'any', 'posts_per_page' => 200, 'fields' => 'ids', 'no_found_rows' => true, ) ); foreach ( $ids as $id ) { wp_delete_post( $id, true ); } } while ( ! empty( $ids ) ); // Scheduled events. wp_clear_scheduled_hook( 'accessiq_scheduled_scan' ); wp_clear_scheduled_hook( 'accessiq_cleanup_old_data' ); wp_clear_scheduled_hook( 'accessiq_remote_triggered_scan' ); } if ( is_multisite() ) { foreach ( get_sites( array( 'fields' => 'ids', 'number' => 0 ) ) as $accessiq_blog_id ) { switch_to_blog( $accessiq_blog_id ); accessiq_uninstall_current_site(); restore_current_blog(); } } else { accessiq_uninstall_current_site(); }