我试图在一个select标签中收集特定信息,以便过滤页面。A有几个价格相同的培训页面(例如:80美元、120美元、500美元等)。问题是,当查询自定义字段“price\\u 1”(可变价格)时,wp\\u query会检索所有具有价格的页面,其中大多数页面的价格相同。
因此,我的select标记如下所示:
选择价格:$80$80$80$120美元120美元120美元120美元120美元500美元500美元500美元500美元500美元。。。
我想在其中收集相同的价格值,当单击其中一个时,将显示所有相关的培训页面。
选择价格:$80$120$500。。。
如果您有一些想法,谢谢您的帮助,此时代码变得很棘手。
P、 S:Im使用ACF插件
这是我的代码:
$args = array(
\'post_type\'=> \'page\',
\'posts_per_page\' => -1,
\'meta_key\' => \'prix_1\',
);
$price_query = new WP_Query( $args );
<div class="col-lg-3">
<select name="page-dropdown">
<?php if( $price_query->have_posts() ) : while( $price_query->have_posts() ) : $price_query->the_post(); ?>
<option value=""><?php the_field(\'prix_1\'); ?></option>
<?php endwhile; ?>
<?php endif; ?>
</select>
</div>
最合适的回答,由SO网友:Tom 整理而成
使用while循环,可以将所有值添加到一个数组中($options
). 然后,在循环遍历值时,可以检查数组中是否出现相同的值(in_array($needle,$haystack)
). 如果是,请不要将其添加到选项数组中。
然后,将每个clean值循环到select中。正如我在代码中提到的,您可能希望将循环包装到函数中并缓存它,然后在调用函数时返回值。
这是未经测试的,但应该可以实现:
<?php
$args = array(
\'post_type\' => \'page\',
\'posts_per_page\' => \'-1\',
\'meta_key\' => \'prix_1\',
);
$price_query = new WP_Query( $args );
$options = array();
//Instead of leaving this inside the page, should wrap into a function inside functions.php
if ( $price_query->have_posts() ) {
while ( $price_query->have_posts() ) {
$price_query->the_post();
$field = get_field( \'prix_1\' );
if ( ! in_array( $field, $options ) ) {
$options[] = $field; //add to the array
}
} //endwhile
}//endif
?>
<div class="col-lg-3">
<select name="page-dropdown">
<?php if ( ! empty( $options ) ) { //this should no longer have duplicates
foreach ( $options as $option ) { ?>
<option value=""><?php echo $option; ?></option>
<?php } //end foreach
} //endif ?>
</select>
</div>