Steueranfrage UND / ODER Meta-Abfrage

In meiner WP_Query möchte ich eine Steueranfrage und eine Meta-Abfrage haben, aber ich möchte, dass die Ergebnisse Ergebnisse enthalten, die der Steueranfrage UND / ODER der Meta-Abfrage entsprechen – wenn ich es wie folgt mache, dann gibt es nur Beiträge zurück das entspricht sowohl der Steuerquery als auch der Meta-Abfrage.

$args = array( 'post_type' => 'product', 'posts_per_page' => 12, 'tax_query' => array( array( 'taxonomy' => 'product_cat', 'field' => 'term_id', 'terms' => $product_cats_to_show, 'include_children' => true ), ), 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'color', 'value' => 'red', 'compare' => '!=', ) ) ); 

Das oben genannte gibt Produkte zurück, die eine red color und Produkte dieser Kategorien haben. Ich möchte, dass es UND / ODER ist, nicht nur UND. IE Ich möchte, dass die Abfrage alle Produkte mit der color red und alle Produkte zurückgibt, die in den in der Steueranfrage angegebenen Kategorien enthalten sind.

Ist dies mit WP_Query-Argumenten möglich? Oder muss ich eine benutzerdefinierte Abfrage erstellen?

Vielen Dank

Solutions Collecting From Web of "Steueranfrage UND / ODER Meta-Abfrage"

Ohne eine benutzerdefinierte Abfrage / Filter ist es nicht möglich.

Ich habe es mit einem Filter erreicht (Code von diesem Typ auf diesem Punkt genommen – https://gist.github.com/elvismdev/61f8509eff8abcc21ef84154b74fbf56 )

 function f1_egpaf_meta_or_tax( $where, \WP_Query $q ) { // Get query vars. $tax_args = isset( $q->query_vars['tax_query'] ) ? $q->query_vars['tax_query'] : null; $meta_args = isset( $q->query_vars['meta_query'] ) ? $q->query_vars['meta_query'] : null; $meta_or_tax = isset( $q->query_vars['_meta_or_tax'] ) ? wp_validate_boolean( $q->query_vars['_meta_or_tax'] ) : false; // Construct the "tax OR meta" query. if ( $meta_or_tax && is_array( $tax_args ) && is_array( $meta_args ) ) { global $wpdb; // Primary id column. $field = 'ID'; // Tax query. $sql_tax = get_tax_sql( $tax_args, $wpdb->posts, $field ); // Meta query. $sql_meta = get_meta_sql( $meta_args, 'post', $wpdb->posts, $field ); // Modify the 'where' part. if ( isset( $sql_meta['where'] ) && isset( $sql_tax['where'] ) ) { $where = str_replace( [ $sql_meta['where'], $sql_tax['where'] ], '', $where ); $where .= sprintf( ' AND ( %s OR %s ) ', substr( trim( $sql_meta['where'] ), 4 ), substr( trim( $sql_tax['where'] ), 4 ) ); } } return $where; } add_filter( 'posts_where', 'f1_egpaf_meta_or_tax', PHP_INT_MAX, 2 ); 

'_meta_or_tax' Sie dann '_meta_or_tax' => true to the args- array passed to WP_Query () `übergeben wurde