¿Está obteniendo un valor de relación incorrecto en $ args en wp_Query?

4

Estoy intentando recuperar datos de la base de datos para mi complemento personalizado y tipo de publicación. mis argumentos de consulta deben ser como:

$args = array(
    'post_type'  => 'products',
    'post_status'=> 'publish',
    'meta_query' => array(
       'relation' => 'OR',
      array( 'key'=>'product_commercial',
       'value'=>'on',
       'compare'=>'='  
    ), 
      array( 'key'=>'product_exterior',
       'value'=>'on',
       'compare'=>'='  
    )
)
);
$search_query = new WP_Query( $args );

Pero , estoy tratando de agregar los valores de las claves meta de forma dinámica, como:

$inner_arrays=array();
$count = 0;
foreach($values as $value){
if($value){

        $inner_arrays[$count]['key'] .= $value;
        $inner_arrays[$count]['value'] .= 'on';
        $inner_arrays[$count]['compare'] .= '=';
        echo $count++;
}
}
print_r($inner_arrays);
    //$array =  $array[0] ; 
    $args = array(
    'post_type'  => 'products',
    'post_status'=> 'publish',
    'meta_query' => array(
       'relation' => 'OR',
    $inner_arrays
)
);
//values are some random values (say fetched from db).

Ahora cuando imprimo la consulta usando

echo "<pre>Last SQL-Query: {$search_query->request}".'<br/>';

se muestra

    Last SQL-Query: SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id )  INNER JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id )  INNER JOIN wp_postmeta AS mt2 ON ( wp_posts.ID = mt2.post_id ) WHERE 1=1  AND ( 
  ( 
    ( wp_postmeta.meta_key = 'product_commercial' AND CAST(wp_postmeta.meta_value AS CHAR) = 'on' ) 
    **AND** 
    ( mt1.meta_key = 'product_framed' AND CAST(mt1.meta_value AS CHAR) = 'on' ) 
    **AND** 
    ( mt2.meta_key = 'product_horizontal' AND CAST(mt2.meta_value AS CHAR) = 'on' )
  )
) AND wp_posts.post_type = 'products' AND ((wp_posts.post_status = 'publish')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10

PROBLEMA : estoy usando relation => OR , pero obteniendo AND en la consulta SQL. ¿Qué estoy haciendo mal?

    
pregunta user101703 26.08.2016 - 14:23

1 respuesta

0

añadir: $inner_arrays['relation'] = 'OR'; y luego la consulta será como:

$args = array(
    'post_type'  => 'products',
    'post_status'=> 'publish',
    'meta_query' => $inner_arrays
);

esto funciona .... :)

    
respondido por el Esar-ul-haq Qasmi 26.08.2016 - 15:41

Lea otras preguntas en las etiquetas