tax_query im WP_Query-Problem

Ich versuche, ein Widget zu erstellen, das mehrere Taxonomien für mein Plugin abfragt, aber Probleme mit meiner Abfrage habe.

Meine Anfrage lautet:

$query_args = array( 'numberposts' => $limit, 'order' => 'DESC', 'orderby' => 'post_date', 'post_type' => 'match', 'posts_per_page' => $limit, ); $query_args['meta_query'] = array( 'key' => 'played', 'value' => true, ); $query_args['meta_query'] = array( 'relation' => 'OR', array( 'key' => 'home_club', 'value' => $club, ), array( 'key' => 'away_club', 'value' => $club, ), ); $query_args['tax_query'] = array( array( 'taxonomy' => 'comp', 'terms' => $comp, 'field' => 'term_id' ), array( 'taxonomy' => 'season', 'terms' => $season, 'field' => 'term_id' ), array( 'taxonomy' => 'team', 'terms' => $team, 'field' => 'term_id' ), array( 'taxonomy' => 'venue', 'terms' => $venue, 'field' => 'term_id' ), ); $r = new WP_Query( $query_args ); if ( $r->have_posts() ) { while ( $r->have_posts()) { $r->the_post(); ... } } 

Ich bin zu 99,9% sicher, dass die Taxonomien korrekt registriert sind, da sie in vielen anderen Bereichen der Website verwendet werden, einschließlich eines ähnlichen Widgets, das get_posts .

Die obige Abfrage gibt nichts aus, als ob es keine Übereinstimmungen gäbe. Wenn ich 'relation' => 'OR', tax_query , zeigt es eine Liste der Übereinstimmungen mit der tax_query an, aber ohne die Taxonomie-Filterung passiert das Gleiche, wenn ich die tax_query vollständig tax_query .

Die folgende SQL-Abfrage wird generiert:

 SELECT SQL_CALC_FOUND_ROWS hoc_posts.ID FROM hoc_posts INNER JOIN hoc_term_relationships ON (hoc_posts.ID = hoc_term_relationships.object_id) INNER JOIN hoc_term_relationships AS tt1 ON (hoc_posts.ID = tt1.object_id) INNER JOIN hoc_term_relationships AS tt2 ON (hoc_posts.ID = tt2.object_id) WHERE 1=1 AND ( hoc_term_relationships.term_taxonomy_id IN (17) OR tt1.term_taxonomy_id IN (3) OR tt2.term_taxonomy_id IN (4) ) AND hoc_posts.post_type = 'match' AND (hoc_posts.post_status = 'publish' OR hoc_posts.post_status = 'private') GROUP BY hoc_posts.ID ORDER BY hoc_posts.post_date DESC LIMIT 0, 6 

Und das Ergebnis von print_r( $query_args ); ist:

 Array ( [numberposts] => 6 [order] => DESC [orderby] => post_date [post_type] => match [posts_per_page] => 6 [meta_query] => Array ( [key] => played [value] => 1 ) [tax_query] => Array ( [relation] => OR [0] => Array ( [taxonomy] => comp [terms] => 17 [field] => term_id ) [1] => Array ( [taxonomy] => season [terms] => 3 [field] => term_id ) [2] => Array ( [taxonomy] => team [terms] => -1 [field] => term_id ) [3] => Array ( [taxonomy] => venue [terms] => 4 [field] => term_id ) ) ) 

Ich ziehe mir die Haare aus, um das Problem herauszufinden. Ich habe mehrere verwandte Beiträge auf dieser Seite und SO durchsucht, aber keine scheint mein spezielles Problem getriggers zu haben.

Jede Hilfe würde sehr geschätzt werden. 🙂

Solutions Collecting From Web of "tax_query im WP_Query-Problem"

Danke an Rarst dafür, dass er mich in die richtige Richtung gelenkt hat. Nach ein bisschen herumspielen erzeugt die folgende Abfrage nun den Effekt, nach dem ich suche:

 $query_args = array( 'numberposts' => $limit, 'order' => 'DESC', 'orderby' => 'post_date', 'post_type' => 'match', ); $query_args['meta_query'] = array( 'key' => 'played', 'value' => true, ); if ( isset( $comp ) ) $query_args['tax_query'][] = array( 'taxonomy' => 'comp', 'terms' => $comp, 'field' => 'term_id', ); if ( isset( $season ) ) $query_args['tax_query'][] = array( 'taxonomy' => 'season', 'terms' => $season, 'field' => 'term_id', ); if ( isset( $team ) ) $query_args['tax_query'][] = array( 'taxonomy' => 'team', 'terms' => $team, 'field' => 'term_id', ); if ( $venue > 0 ) $query_args['tax_query'][] = array( 'taxonomy' => 'venue', 'terms' => $venue, 'field' => 'term_id', );