prefix . 'errorwatcher_logs' ); // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.DirectDatabaseQuery.SchemaChange, WordPress.DB.PreparedSQL.InterpolatedNotPrepared $wpdb->query( "DROP TABLE IF EXISTS {$table_name}" ); // Delete plugin options. delete_option( 'errorwatcher_settings' ); delete_option( 'errorwatcher_version' ); // Clean up scheduled cron hooks. wp_clear_scheduled_hook( 'errorwatcher_morning_report' ); wp_clear_scheduled_hook( 'errorwatcher_evening_report' ); wp_clear_scheduled_hook( 'errorwatcher_cleanup_logs' ); // Clean up runtime storage directories using WP_Filesystem. $upload_dir = wp_upload_dir(); global $wp_filesystem; if ( empty( $wp_filesystem ) ) { require_once ABSPATH . 'wp-admin/includes/file.php'; WP_Filesystem(); } if ( $wp_filesystem ) { $base_upload_dir = trailingslashit( $upload_dir['basedir'] ); $dirs = array( $base_upload_dir . 'errorwatcher', $base_upload_dir . 'errorwatcher-temp', ); foreach ( $dirs as $dir ) { if ( $wp_filesystem->is_dir( $dir ) ) { $wp_filesystem->delete( $dir, true ); } } } } errorwatcher_uninstall();