query( $wpdb->prepare( 'DROP TABLE IF EXISTS %i', $wpdb->prefix . $rafgrid_table ) ); } foreach ( array( 'settings', 'rules', 'redirects', 'version', 'mcp_log', 'presence', 'last_scheduled_export', 'export_token', 'migrated_sse' ) as $rafgrid_option ) { delete_option( 'rafgrid_' . $rafgrid_option ); } // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->options} WHERE option_name LIKE %s", $wpdb->esc_like( 'rafgrid_job_' ) . '%' ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->usermeta} WHERE meta_key LIKE %s", $wpdb->esc_like( 'rafgrid_' ) . '%' ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery,WordPress.DB.DirectDatabaseQuery.NoCaching $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->postmeta} WHERE meta_key = %s", '_rafgrid_notes' ) ); foreach ( array( 'rafgrid_rules_run', 'rafgrid_stock_alert', 'rafgrid_scheduled_export', 'rafgrid_bulk_job_chunk' ) as $rafgrid_hook ) { wp_unschedule_hook( $rafgrid_hook ); } // Private snapshots and exports in uploads/rafgrid/. $rafgrid_uploads = wp_upload_dir( null, false ); $rafgrid_root = trailingslashit( $rafgrid_uploads['basedir'] ) . 'rafgrid'; foreach ( array( 'snapshots', 'exports', '' ) as $rafgrid_sub ) { $rafgrid_dir = '' === $rafgrid_sub ? $rafgrid_root : $rafgrid_root . '/' . $rafgrid_sub; if ( ! is_dir( $rafgrid_dir ) ) { continue; } foreach ( array_merge( glob( $rafgrid_dir . '/*' ) ?: array(), array( $rafgrid_dir . '/.htaccess' ) ) as $rafgrid_file ) { if ( is_file( $rafgrid_file ) ) { wp_delete_file( $rafgrid_file ); } } rmdir( $rafgrid_dir ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_system_operations_rmdir }