WP查询和多个密钥

时间:2017-01-20 10:02:14

标签: php wordpress advanced-custom-fields

我正在尝试在wordpress中实现多元键过滤器。这很简单,我得到一个表格的价值来过滤我的帖子。如果我只使用" price"查询wordked完美。如果我添加"流派"什么都行不通,查询无法正常工作。

对于field"类型"我正在使用高级自定义字段中的复选框来使用此结构" homme:Homme / femme:Femme"。

我测试不同的东西,比如删除"价格"并查询"流派"不工作......

我从这个

获得价值
  <?php
     if($_GET['minprice'] && !empty($_GET['minprice']))
        {
            $minprice = $_GET['minprice'];
        } else {
            $minprice = 0;
        }

        if($_GET['maxprice'] && !empty($_GET['maxprice']))
        {
            $maxprice = $_GET['maxprice'];
        } else {
            $maxprice = 1000;
        }

 if($_GET['genre'] && !empty($_GET['genre']))
        {
            $genre = $_GET['genre'];
        }
    ?>

我的查询看起来像这样

 $args = array(
        'cat' => $cat,
        'post_type' => 'post',
        'posts_per_page' => 28,
        'paged' => $paged,
        'meta_query' => array(
            'relation' => 'AND',

                array(
                    'key' => 'prix',
                    'type' => 'NUMERIC',
                    'value' => array($minprice, $maxprice),
                    'compare' => 'BETWEEN'
                    ), 

                array(
                    'key' => 'genre',
                    'value' => $genre,
                    'compare' => 'LIKE'
                    )
                )
            );

我的查询循环

    <?php
  // set up or arguments for our custom query
  $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
  $args = array(
    'cat' => $cat,
    'post_type' => 'post',
    'posts_per_page' => 28,
    'paged' => $paged,
    'meta_query' => array(
        'relation' => 'AND',

            array(
                'key' => 'prix',
                'type' => 'NUMERIC',
                'value' => array($minprice, $maxprice),
                'compare' => 'BETWEEN'
                ), 

            array(
                'key' => 'genre',
                'value' => $genre,
                'compare' => 'LIKE'
                )
            )
        );

// create a new instance of WP_Query
  $the_query = new WP_Query($args);
?>

<?php if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); // run the loop ?>

  <?php
 get_template_part( 'content-category', get_post_format() );
 ?>


<?php endwhile; ?>

<?php if ($the_query->max_num_pages > 1) { // check if the max number of pages is greater than 1  ?>
  <div class="clearfix"></div>

<?php bootstrap_pagination();?>

<?php } ?>

<?php else: ?>
        <?php get_template_part( 'no-results', 'archive' ); ?>
  <?php endif; ?>
</div>  
<?php wp_reset_query(); ?>

我测试了这个并且它的工作!

 $args = array(
            'cat' => $cat,
            'post_type' => 'post',
            'posts_per_page' => 28,
            'paged' => $paged,
            'meta_query' => array(
                    array(
                        'key' => 'prix',
                        'type' => 'NUMERIC',
                        'value' => array($minprice, $maxprice),
                        'compare' => 'BETWEEN'
                        ), 

                    )
                );

但那不起作用

$args = array(
            'cat' => $cat,
            'post_type' => 'post',
            'posts_per_page' => 28,
            'paged' => $paged,
            'meta_query' => array(         
                array(
                        'key' => 'genre',
                        'value' => $genre,
                        'compare' => 'LIKE'
                        )
                    )
                );

拜托,能帮助我,因为我失去了理智...... 谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你错过了meta_query

中的包装数组
$args = array(
   'cat'            => $cat,
   'post_type'      => 'post',
   'posts_per_page' => 28,
   'paged'          => $paged,
   'meta_query'     => array(
      array(
         'relation' => 'AND',
         array(
            'key'     => 'prix',
            'type'    => 'NUMERIC',
            'value'   => array( $minprice, $maxprice ),
            'compare' => 'BETWEEN'
         ), 
         array(
            'key'     => 'genre',
            'value'   => $genre,
            'compare' => 'LIKE'
         ),
      ),
   ),
);