Intereting Posts

Несколько отношений для нескольких tax_query в WP_Query

Я хочу использовать WP_Query() для фильтрации некоторых моих сообщений. Проблема, с которой я сейчас сталкиваюсь, заключается в обработке запроса таксономии. Обычно WP_Query() обрабатывает только одно отношение для tax_query() (либо AND или OR), но то, что мне нужно, это смешанное использование этих отношений в tax_query() , как это можно достичь?
например

 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'taxonomy1', 'field' => 'slug', 'terms' => array( $term) ), array( 'taxonomy' => 'taxonomy3', 'field' => 'slug', 'terms' => 'terms' => array( $term3), 'operator' => 'IN', ) // below i want to use OR relationship 'relation' => 'OR', array( 'taxonomy' => 'taxonomy4', 'field' => 'slug', 'terms' => array( $term4) ), array( 'taxonomy' => 'taxonomy2', 'field' => 'slug', 'terms' => 'terms' => array( $term2), 'operator' => 'IN', ) ) 

Я знаю, что код выше не работает, мне нужно использовать WP_Query() фильтр для этого? Есть идеи?

Solutions Collecting From Web of "Несколько отношений для нескольких tax_query в WP_Query"

Это можно сделать, используя term_taxonomy_id, а не пул, который будет эффективно игнорировать любую систему таксономии и просто посмотреть на уникальное поле term_taxonomy_id. Это позволит вам эффективно выполнять смешанные отношения. Вы хотите использовать общее отношение AND и поместить все термины, которые должны быть связаны ИЛИ в одном элементе, используя оператор IN. Сначала вам нужно будет отобразить термины, которые будут указаны в их term_taxonomy_ids.

 $taxes = array( 'taxonomy1', 'taxonomy2', 'taxonomy3', 'taxonomy4' ); foreach ( $taxes as $tax ) { $terms = get_terms( $tax ); foreach ( $terms as $term ) $tax_map[$tax][$term->slug] = $term->term_taxonomy_id; } $args['tax_query'] => array( 'relation' => 'AND', array( 'taxonomy' => 'taxonomy1', 'field' => 'term_taxonomy_id', 'terms' => array( $tax_map['taxonomy1'][$slug] ) 'operator' => 'IN', ), array( 'taxonomy' => 'taxonomy3', 'field' => 'term_taxonomy_id', 'terms' => array( $tax_map['taxonomy3'][$slug] ), 'operator' => 'IN', ), array( 'taxonomy' => 'taxonomy4', // gets ignored 'field' => 'term_taxonomy_id', 'terms' => array( $tax_map['taxonomy4'][$slug], $tax_map['taxonomy2'][$slug] ), 'operator' => 'IN', ), ); 

Обратите внимание, что pre-3.5, вам также нужно указать 'include_children' => false . Смотрите этот билет Trac для получения дополнительной информации: https://core.trac.wordpress.org/ticket/21228

Я стараюсь использовать tax_query как meta_query для нескольких или / или операторов, подобных этому