我正在尝试根据WordPress网站中的高级自定义字段设置过滤器。基本上我的名为'ispremium'的高级自定义字段有两个值为'yes'和'no',在下拉过滤器中我设置了两个选项:'Premium Only'和'All Programs'。
当我选择'Premium Only'下拉选项时,我需要这样做,它会列出所有值为'ispremium'='yes'的帖子,当选择所有程序时,它会列出'ispremium = yes'和'ispremium = '没有'。我有以下代码,但它列出了'ispremium = yes'的帖子。我的代码有什么问题?
<select name="order" onchange="this.form.submit();">
<?php
$order_options = array(
'yes' => 'Premium Only',
'no' => 'All Programs',
);
$result = query_posts( array(
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'ispremium',
'value' => 'yes',
),
) ) );
$result = query_posts( array(
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'ispremium',
'value' => 'yes','no'
),
) ) );
foreach( $order_options as $result => $label ) {
echo "<option ".selected( $_GET['value'], $value )." value='$value'>$label</option>";
}
?>
</select>
答案 0 :(得分:1)
首先,尝试使用WP_Query
代替query_posts()
。您还有一些语法错误,例如'value' => 'yes','no'
。
$args = array(
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'ispremium',
'value' => 'yes',
'compare' => '='
)
)
);
$the_query = new WP_Query( $args );
$args = array(
'post_type' => 'post',
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'ispremium',
'value' => 'yes',
'compare' => '='
),
array(
'key' => 'ispremium',
'value' => 'no',
'compare' => '='
)
)
);
$the_query = new WP_Query( $args );
检查ACF documentation以获取更多信息。另外,我建议您使用Ajax执行此操作,因为如果将此代码放在select
元素中,则可用选项将来自上次查询,并且在字段更改时不会动态。
但是我并没有完全得到你想要做的事情;您可能希望在另一个下拉菜单中显示可用的程序,或者您可以简单地重定向到另一个存档页面,该页面会根据所选选项列出程序。