如何将自定义分类添加到搜索

时间:2016-06-03 作者:user995317

因此,我有一种称为“汽车”的自定义分类法。我希望当用户进行搜索时,它也会通过分类法进行搜索。这意味着,在“汽车”分类法中,如果我有“奥迪”一词,并且用户搜索关键词“奥迪”,那么它将返回标记有“奥迪”一词的帖子。

我试过这个:

function mytheme_pre_get_posts( $query ) {
$query->set( \'tax_query\', array(
        array(
            \'taxonomy\' => \'cars\',
            \'field\'    => \'name\',
            \'terms\'    =>  $_GET[\'s\'],
        )
    ));
add_action( \'pre_get_posts\', \'mytheme_pre_get_posts\', 1 );
但这完全破坏了搜索。这是可以做到的,还是我错过了什么?

1 个回复
SO网友:majick

您可以尝试取消设置原始搜索查询,否则您可能会加倍,而组合结果将一无所获?例如,尝试向函数中添加:

$query->set(\'s\',\'\');

UPDATE

我不确定,但你可以试试AND 运算符-我认为这将添加到现有查询中,而不是替换它。。。

function mytheme_pre_get_posts( $query ) {
    if ( !is_admin() && $query->is_search() && $query->is_main_query() ) {
        $term = get_term_by(\'name\', get_query_var(\'s\'), \'cars\');
        if ($term) {
            $query->set( \'tax_query\', array(
                 array(
                    \'taxonomy\' => \'cars\',
                    \'field\'    => \'slug\',
                    \'terms\'    =>  $term->slug,
                    \'operator\' => \'AND\'
                )
            ));
         }
    }
}
add_action( \'pre_get_posts\', \'mytheme_pre_get_posts\', 1 );
注:更改了字段的使用name 正如@PieterGoosen提到的slug, 和预取的术语slug传递给tax查询,以及@birgire提到的额外条件。

相关推荐

nothing happen in search form

我想创建搜索表单,但当我搜索时什么都没有发生,这是代码:索引。php: <div class=\"tech-btm\"> <?php get_search_form();?> </div> 搜索表单:<form role=\"search\" method=\"get\" id=\"searchform\" action=\"<?php echo home_url(\'/\')?>\"> &