connected() ) { // Best effort, 15 s max: the admin can still revoke from miPlata. $miplata_client->revoke_self(); } $miplata_fp = MiPlata_Store::footprint(); MiPlata_Files::wipe_all(); foreach ( $miplata_fp['options'] as $miplata_opt ) { delete_option( $miplata_opt ); } delete_option( 'miplata_cron_seen' ); foreach ( $miplata_fp['transients'] as $miplata_t ) { delete_transient( $miplata_t ); } foreach ( $miplata_fp['cron'] as $miplata_hook ) { wp_clear_scheduled_hook( $miplata_hook ); } global $wpdb; // Webhook dedupe transients + any leftovers with our prefix. $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_miplata_wh_%' OR option_name LIKE '_transient_timeout_miplata_wh_%' OR option_name LIKE 'miplata_%'" ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery foreach ( $miplata_fp['order_meta'] as $miplata_key ) { $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->postmeta} WHERE meta_key = %s", $miplata_key ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery $miplata_hpos = $wpdb->prefix . 'wc_orders_meta'; if ( $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $miplata_hpos ) ) === $miplata_hpos ) { // phpcs:ignore WordPress.DB.DirectDatabaseQuery $wpdb->query( $wpdb->prepare( 'DELETE FROM %i WHERE meta_key = %s', $miplata_hpos, $miplata_key ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery } } foreach ( $miplata_fp['user_meta'] as $miplata_key ) { $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->usermeta} WHERE meta_key = %s", $miplata_key ) ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery } flush_rewrite_rules( false );