我正在尝试向搜索中添加自定义字段,以便可以通过元值对其进行优化。目前,我已在常规搜索中添加了一些选择列表:
<form role="search" action="<?php echo site_url(\'/\'); ?>" method="get" id="searchform">
<input type="hidden" name="s" value="carcpt" /> <!-- // hidden \'products\' value -->
<select name="price">
<option value="">Nothing</option>
<option value="500.00">500.00</option>
<option value="100.00">100.00</option>
<option value="50.00">50.00</option>
</select>
<select name="year">
<option value="">Nothing</option>
<option value="2011">2011</option>
<option value="2007">2007</option>
<option value="1991">1991</option>
</select>
<input type="submit" alt="Search" value="Search" />
</form>
在我的
search.php
我有以下条件:
$q = get_search_query();
if($q = \'carcpt\'){
$price = $_GET[\'price\'];
$year = $_GET[\'year\'];
$search = new WP_Query(
array(
\'post_type\' => \'carcpt\',
\'meta_query\' => array(
array(
\'key\' => \'_price\',
\'value\' => $price
),
array(
\'key\' => \'_year\',
\'value\' => $year
)
)
)
);
}
这就是场景-我有两个问题:
1) 这似乎是一种通过自定义字段添加和优化我的搜索结果的非常“黑客”的方法-有更好/更广泛接受的方法吗?
2) 上述查询的问题是,如果用户没有输入价格或年份,它将运行查询并仅返回带有空价格/年份元的帖子。在我的查询中,是否有一种方法可以确定元是否为空并相应地修改我的查询-不包括开关?
最合适的回答,由SO网友:Bendoh 整理而成
1) 我认为您的解决方案在“正确的方式”方面是完全可以接受的-post meta是用于搜索的。对我来说似乎并不讨厌。
2) 您应该单独构建meta\\u查询:
$meta_query = array();
if( !empty( $_GET[\'price\'] ) ) {
$meta_query[] = array( \'key\' => \'_price\', \'value\' => $_GET[\'price\'] );
}
if( !empty( $_GET[\'year\'] ) ) {
$meta_query[] = array( \'key\' => \'_year\', \'value\' => $_GET[\'year\'] );
}
$search = new WP_Query( array(
\'post_type\' => \'carcpt\',
\'meta_query\' => $meta_query
) );
这样,您只能查询具有提供的非空值的元键。
我想指出,查询变量的修改最好在pre_get_posts
否则,将执行两个查询:一个用于搜索“carcpt”,另一个用于搜索“carcpt”帖子类型和元查询。