所以我一直在努力研究如何使用用户输入来构建一种过滤大量wordpress帖子的方法。我不太清楚我是否理解如何让它发挥作用。到目前为止,我将简要解释一下我所知道的内容,也许有人可以指出我正确的方向。
所以我理解我可以使用wp_query($ args)函数来查询我的数据库并将其传递给我想要的过滤参数以获得我想要的结果。现在因为它必须由用户完成,我想我可以添加一个html表单并像这样做
<form class="navbar-form navbar-right" method="get">
<div class="form-group">
Price($) <input type="number" name="priceone" min="0" max="99" value="0"> to
<input type="number" name="pricetwo" min="0" max="300">
<input type="submit" value="Search">
</div>
</form>
然后我按如下方式编写了php代码,在我的主页上显示我的wordpress循环。我使用表单get方法将变量存储为php变量,如果用户按下submit,它将在wp_query循环中用作变量。然而,这不起作用。
<?php
$minprice = $_GET["priceone"];
$minprice = $_GET["pricetwo"];
$args = array(
'post_type' => 'food',
'posts_per_page' => -1,
'meta_query'=> array(
'key' => 'price',
'value' => array($minprice,$maxprice),
'compare' => 'BETWEEN',
'type' => 'NUMERIC'
)
);
$thefood = new WP_Query( $args );
?>
<?php if ( $thefood->have_posts() ) : while ( $thefood->have_posts() ) : $thefood->the_post(); ?>
<div class="col-lg-2 col-md-3 col-sm-4 col-xs-4" style="padding-left: 0; padding-right: 0;">
<?php the_post_thumbnail(full, array('class' => 'img-responsive')); ?>
</div>
<?php endwhile; wp_reset_query(); else: ?>
<p><?php _e('Sorry, no food matched your criteria.'); ?></p>
<?php endif; ?>
在我将新的价格变量添加到其中之前,循环工作正常并显示所有帖子。现在,当我按下提交时,它只是做了什么,只是将变量添加到URL的末尾说?pricemin = 3等。
我觉得我不理解某事。有人可以指出我正确的方向。谢谢
答案 0 :(得分:0)
使用&#39; meta_query&#39;你实际上需要传递数组和数组。 您的代码的另一个问题是您在第二行中再次定义了minprice而不是maxprice。
Class Reference/WP Meta Query « WordPress Codex
<?php
$minprice = $_GET["priceone"];
$maxprice = $_GET["pricetwo"];
$args = array(
'post_type' => 'food',
'posts_per_page' => -1,
'meta_query'=> array(
array(
'key' => 'price',
'value' => array($minprice,$maxprice),
'compare' => 'BETWEEN',
'type' => 'NUMERIC'
)
)
);