Fix 'taxonomy' and 'term' query var logic. See #12891

git-svn-id: http://svn.automattic.com/wordpress/trunk@15860 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
scribu 2010-10-20 12:07:23 +00:00
parent 785b6b305c
commit 21af801a5a
2 changed files with 27 additions and 29 deletions

View File

@ -281,10 +281,7 @@ class WP {
}
}
if ( isset( $taxonomy_query_vars[$wpvar] ) ) {
$this->query_vars['taxonomy'] = $taxonomy_query_vars[$wpvar];
$this->query_vars['term'] = $this->query_vars[$wpvar];
} elseif ( isset($post_type_query_vars[$wpvar] ) ) {
if ( isset($post_type_query_vars[$wpvar] ) ) {
$this->query_vars['post_type'] = $post_type_query_vars[$wpvar];
$this->query_vars['name'] = $this->query_vars[$wpvar];
}
@ -1904,4 +1901,4 @@ class WP_MatchesMapRegex {
}
?>
?>

View File

@ -1452,37 +1452,38 @@ class WP_Query extends WP_Object_Query {
if ( !empty($q['taxonomy']) && !empty($q['term']) ) {
$tax_query[] = array(
'taxonomy' => $q['taxonomy'],
'terms' => $q['term'],
'terms' => array( $q['term'] ),
'field' => 'slug',
);
}
} else {
foreach ( $GLOBALS['wp_taxonomies'] as $taxonomy => $t ) {
if ( $t->query_var && !empty( $q[$t->query_var] ) ) {
$tax_query_defaults = array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'operator' => 'IN'
);
foreach ( $GLOBALS['wp_taxonomies'] as $taxonomy => $t ) {
if ( $t->query_var && !empty( $q[$t->query_var] ) ) {
$tax_query_defaults = array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'operator' => 'IN'
);
if ( $t->rewrite['hierarchical'] ) {
$q[$t->query_var] = basename($q[$t->query_var]);
if ( $taxonomy == $q['taxonomy'] )
$q['term'] = basename($q['term']);
}
if ( $t->rewrite['hierarchical'] ) {
$q[$t->query_var] = basename($q[$t->query_var]);
if ( $taxonomy == $q['taxonomy'] )
$q['term'] = basename($q['term']);
}
$term = $q[$t->query_var];
$term = $q[$t->query_var];
if ( strpos($term, '+') !== false ) {
$terms = preg_split( '/[+\s]+/', $term );
foreach ( $terms as $term ) {
if ( strpos($term, '+') !== false ) {
$terms = preg_split( '/[+\s]+/', $term );
foreach ( $terms as $term ) {
$tax_query[] = array_merge( $tax_query_defaults, array(
'terms' => array( $term )
) );
}
} else {
$tax_query[] = array_merge( $tax_query_defaults, array(
'terms' => array( $term )
'terms' => preg_split('/[,\s]+/', $term)
) );
}
} else {
$tax_query[] = array_merge( $tax_query_defaults, array(
'terms' => preg_split('/[,\s]+/', $term)
) );
}
}
}