我只是为客户做的,你必须在pre_get_posts
行动这意味着您将向WordPress查询添加参数before 它返回帖子。
将此添加到函数。php:
// advanced search functionality
function advanced_search_query($query) {
if($query->is_search()) {
// category terms search.
if (isset($_GET[\'category\']) && !empty($_GET[\'category\'])) {
$query->set(\'tax_query\', array(array(
\'taxonomy\' => \'***the_taxonomy_slug_of_your_category***\',
\'field\' => \'slug\',
\'terms\' => array($_GET[\'category\']) )
));
}
}
return $query;
}
add_action(\'pre_get_posts\', \'advanced_search_query\', 1000);
假设您通过了
category
变量您可以通过创建
select
以“类别”作为名称的标记:
<select name="category">
<option value="***cat_slug***">Cat. name</option>
<option value="***cat_slug***">Cat. name</option>
<option value="***cat_slug***">Cat. name</option>
</select>
完整表格:
<form role="search" method="get" action="<?php echo esc_url( home_url( \'/\' ) ); ?>">
<!-- With this hidden input you can define a specific post type. -->
<input type="hidden" name="post_type" value="your_post_type" />
<input name="s" type="text" />
<select name="category">
<!-- Insert here all option tags you want, with category slug as value -->
</select>
<button type="submit">Submit</button>
</form>
一旦提交,$\\u GET[]将包含
s
,
post_type
和
category
.
s
和
post_type
默认情况下使用WP搜索,并且
category
将在中使用
pre_get_posts()
向WP查询添加参数。
因此,最终WP查询将考虑: