使用pre_get_posts
检测URL中的某些筛选器变量并相应地筛选查询的操作。
例如,假设您的表单集price_low
和price_high
获取vars,因此URL如下所示:
domain.com/?price_low=100&price_high=1000
然后,过滤器函数检查这些变量的存在,并创建
meta_query
. 本例检查它是否是主页上的主查询,请参阅
Conditional Tags 页面介绍如何检查是否正在发生其他类型的查询,如类别或标记等。。
function wpa_filter_home_query( $query ){
if( $query->is_home()
&& $query->is_main_query()
&& isset( $_GET[\'price_low\'] )
&& isset( $_GET[\'price_high\'] ) ) {
$meta_query = array(
array(
\'key\' => \'price\',
\'value\' => array( $_GET[\'price_low\'], $_GET[\'price_high\'] ),
\'type\' => \'numeric\',
\'compare\' => \'BETWEEN\'
)
);
$query->set( \'meta_query\', $meta_query );
}
}
add_action( \'pre_get_posts\', \'wpa_filter_home_query\' );
编辑-提交值的简单表单示例。省略
action
属性将表单提交到当前页面。
<form method="GET">
<input type="text" name="price_low">
<input type="text" name="price_high">
<input type="submit">
</form>