Vários relacionamentos em uma consulta

Estou pesquisando um pouco WP_Query e eu surgiu um problema.

Tenho campos personalizados em ingressos e gostaria de fazer um WP_Query mostrando isso (coloque um exemplo):

(field1 = “data1″ AND field2 = “data2″) OR (field1 = “data2″ AND field2 = “data1″) 

Para fazer isso criei essa consulta, mas ela me retorna bem.

 'meta_query' => array ( 'relation' => 'AND', array ( 'key' => 'field1', 'value' => 'data1', 'compare' => '=' ), array ( 'key' => 'field2', 'value' => 'data2', 'compare' => '=' ), 'relation' => 'OR', array ( 'relation' => 'AND', array ( array ( 'key' => 'field1', 'value' => 'data2', 'compare' => '=' ), array ( 'key' => 'field2', 'value' => 'data1', 'compare' => '=' ), ), ), ) 

Alguém sabe o que estou errado? Eu tentei maneiras diferentes, mas nada (eu coloco isso porque é o que eu acho que é aquele que se aproxima mais.

Saudações e obrigado!

PD: Desculpe meu inglês! (Google Tradutor)

Solutions Collecting From Web of "Vários relacionamentos em uma consulta"

Infelizmente, as meta-consultas não suportam uma combinação de AND & OR . Mas o que você pode fazer, é fazer duas consultas, uma para cada regra, e depois combinar os resultados.

 $group_1 = get_posts( array( 'posts_per_page' => -1, 'fields' => 'ids', 'meta_query' => array ( array ( 'key' => 'field1', 'value' => 'data1', ), array ( 'key' => 'field2', 'value' => 'data2', ), ), ) ); $group_2 = get_posts( array( 'posts_per_page' => -1, 'fields' => 'ids', 'meta_query' => array ( array ( 'key' => 'field1', 'value' => 'data2', ), array ( 'key' => 'field2', 'value' => 'data1', ), ), ) ); $query = new WP_Query( array( 'post__in' => array_merge( $group_1, $group_2 ), ) ); 

Use o filtro posts_clauses para isso. Basta alterar as partes da matriz lá do que você precisa.

Você ainda pode fazer isso dentro de uma delcaração WP_Query. Use o valor de compare de IN e passe o valor uma matriz de valores possíveis.

 $my_query = new WP_Query( array( 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'field1', 'value' => array('data1', data2'), 'compare' => 'IN' ), array( 'key' => 'field2', 'value' => array('data1', data2'), 'compare' => 'IN' ), ) ); 

Isso também, no entanto, retorna as possibilidades de (field1='data1' and field1='data1') or (field1='data2' and field1='data2)' , então talvez isso não seja ideal. Não tenho certeza se isso não atende aos seus requisitos.