diff --git a/wp-includes/canonical.php b/wp-includes/canonical.php index 2c313e5a8..af64d9606 100644 --- a/wp-includes/canonical.php +++ b/wp-includes/canonical.php @@ -164,8 +164,18 @@ function redirect_canonical( $requested_url = null, $do_redirect = true ) { $redirect['query'] = remove_query_arg( array( 'term', 'taxonomy'), $redirect['query']); } } + + $tax_obj = get_taxonomy( $obj->taxonomy ); + $tax_query_vars = array_diff( array_keys( $wp_query->query ), array_keys( $_GET ), array( 'taxonomy', 'term', $tax_obj->query_var ) ); + $tax_url = parse_url($tax_url); - if ( ! empty($tax_url['query']) ) { // Custom taxonomies may only be accessable via ?taxonomy=..&term=.. + if ( ! empty($tax_query_vars) ) { + foreach ( array( 'taxonomy', 'term', $tax_obj->query_var ) as $qv ) { + if ( !empty($wp_query->query[$qv]) ) + $redirect['query'] = add_query_arg($qv, $wp_query->query[$qv], $redirect['query']); + } + + } elseif ( ! empty($tax_url['query']) ) { // Custom taxonomies may only be accessable via ?taxonomy=..&term=.. parse_str($tax_url['query'], $query_vars); $redirect['query'] = add_query_arg($query_vars, $redirect['query']); } else { // Taxonomy is accessable via a "pretty-URL"