| 1 | --- a/wp-includes/canonical.php |
|---|
| 2 | +++ b/wp-includes/canonical.php |
|---|
| 3 | @@ ... @@ |
|---|
| 4 | - $redirect_url = user_trailingslashit($redirect_url); |
|---|
| 5 | - |
|---|
| 6 | - if ( !empty($redirect_url) && $redirect_url != $requested_url ) { |
|---|
| 7 | - wp_redirect($redirect_url, 301); |
|---|
| 8 | - exit(); |
|---|
| 9 | - } |
|---|
| 10 | + $redirect_url = user_trailingslashit($redirect_url); |
|---|
| 11 | + |
|---|
| 12 | + // Preserve all $_GET parameters in the redirect |
|---|
| 13 | + $parsed_url = parse_url($redirect_url); |
|---|
| 14 | + $query_args = array(); |
|---|
| 15 | + if ( !empty($parsed_url['query']) ) { |
|---|
| 16 | + parse_str($parsed_url['query'], $query_args); |
|---|
| 17 | + } |
|---|
| 18 | + // Merge $_GET parameters with those already in the URL |
|---|
| 19 | + $merged_args = array_merge($_GET, $query_args); |
|---|
| 20 | + |
|---|
| 21 | + // Rebuild the final URL with all parameters |
|---|
| 22 | + $scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : ''; |
|---|
| 23 | + $host = isset($parsed_url['host']) ? $parsed_url['host'] : ''; |
|---|
| 24 | + $port = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : ''; |
|---|
| 25 | + $path = isset($parsed_url['path']) ? $parsed_url['path'] : ''; |
|---|
| 26 | + $base_url = $scheme . $host . $port . $path; |
|---|
| 27 | + |
|---|
| 28 | + $final_redirect_url = !empty($merged_args) ? add_query_arg($merged_args, $base_url) : $redirect_url; |
|---|
| 29 | + |
|---|
| 30 | + if ( !empty($final_redirect_url) && $final_redirect_url != $requested_url ) { |
|---|
| 31 | + wp_redirect($final_redirect_url, 301); |
|---|
| 32 | + exit(); |
|---|
| 33 | + } |
|---|