--- a/wp-includes/canonical.php
+++ b/wp-includes/canonical.php
@@ ... @@
-   $redirect_url = user_trailingslashit($redirect_url);
-
-   if ( !empty($redirect_url) && $redirect_url != $requested_url ) {
-       wp_redirect($redirect_url, 301);
-       exit();
-   }
+   $redirect_url = user_trailingslashit($redirect_url);
+
+   // Preserve all $_GET parameters in the redirect
+   $parsed_url = parse_url($redirect_url);
+   $query_args = array();
+   if ( !empty($parsed_url['query']) ) {
+       parse_str($parsed_url['query'], $query_args);
+   }
+   // Merge $_GET parameters with those already in the URL
+   $merged_args = array_merge($_GET, $query_args);
+
+   // Rebuild the final URL with all parameters
+   $scheme   = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : '';
+   $host     = isset($parsed_url['host']) ? $parsed_url['host'] : '';
+   $port     = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '';
+   $path     = isset($parsed_url['path']) ? $parsed_url['path'] : '';
+   $base_url = $scheme . $host . $port . $path;
+
+   $final_redirect_url = !empty($merged_args) ? add_query_arg($merged_args, $base_url) : $redirect_url;
+
+   if ( !empty($final_redirect_url) && $final_redirect_url != $requested_url ) {
+       wp_redirect($final_redirect_url, 301);
+       exit();
+   }
