2014-09-10 4 views
0

J'apprends toujours wordpress et j'essaie d'effectuer une requête de messages avec WP_Query, meta_query pour être précis, la chose est après avoir essayé différentes manières possibles et découvrir que je ne peux pas imbriquer des tableaux avec des relations que je ne savoir si la prochaine façon possible est de faire une requête SQL directement.Requête complexe avec WP_Query

Pour mieux expliquer ce que je voudrais faire, le prochain tableau aiderai, espérons:

'meta_query' => array(
    'relation' => 'AND', 
    array(
     'key'  => 'Meta_geo', 
     'value' => '46', 
     'compare' => '=', 
    ), 
    array(
     'key'  => 'Meta_dest', 
     'value' => 'si', 
     'compare' => '=', 
    ), 
    array(
     'relation' => 'OR', 

     array(
      array(
      'key'  => 'Meta_1', 
      'value' => '10', 
      'compare' => '<=', 
      ), 
      array(
      'key'  => 'Meta_1', 
      'value' => '30', 
      'compare' => '>=', 
      ) 
     ), 

     array(
      'relation' => 'OR', 
      array(
      'key'  => 'Meta_1', 
      'value' => '', 
      'compare' => '=', 
      ), 
      array(
      'key'  => 'Meta_1', 
      'value' => '', 
      'compare' => '=', 
      ) 
     ) 
    ) 
), 

Merci beaucoup pour votre temps, s'il y a un expertet qui peut me donner une idée, je serai reconnaissant.

Désolé pour mon anglais.

+0

pouvez-vous expliquer votre requête? –

+0

pouvez-vous faire votre requête en SQL? –

Répondre

0

Sur la base de ce que vous avez au-dessus du dessous est le plus proche de votre vont obtenir ...

'meta_query' => array(
    'relation' => 'OR', 
    array(
     'key'  => 'Meta_geo', 
     'value' => '46', 
     'compare' => '=', 
    ), 
    array(
     'key'  => 'Meta_dest', 
     'value' => 'si', 
     'compare' => '=', 
    ), 

    array(
     'key'  => 'Meta_1', 
     'value' => array('10','11','12' etc), 
     'compare' => 'IN', 
    ), 

) 

Cela vous laissera un peu le tri à faire cependant. Cela peut être fait avec une boucle et comme vous affichez normalement les résultats d'une requête en utilisant la boucle, vous pouvez l'utiliser.

par exemple.

while ($my_query->have_posts()) : $my_query->the_post(); 
    $metavalue = get_post_meta($post->ID, 'meta_geo', true); 
    $metavalue = get_post_meta($post->ID, 'meta_dist', true);// if there are a lot of conds, use get_post_meta($post->ID) to return object of value arrays 

    if($metavalue == 46 &&): //proceed 
     //html here! 
    endif; 
endwhile;