htaccess()->revert(); $plugin->robots()->revert_physical_file(); } catch ( \Throwable $e ) { return; } } /** * Deletes one of this plugin's user meta keys, for every user. * * @param string $key Meta key. * @return void */ function aiblackout_uninstall_user_meta( $key ) { delete_metadata( 'user', 0, $key, '', true ); } /** * Deletes every transient this plugin created, self-test results included. * * @return void */ function aiblackout_uninstall_transients() { global $wpdb; // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching -- One-off cleanup at uninstall; there is no API for deleting transients by prefix. $names = $wpdb->get_col( $wpdb->prepare( "SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE %s OR option_name LIKE %s", $wpdb->esc_like( '_transient_aiblackout_' ) . '%', $wpdb->esc_like( '_transient_timeout_aiblackout_' ) . '%' ) ); foreach ( (array) $names as $name ) { delete_option( $name ); } } aiblackout_uninstall();