WordPress搜索:仅使用停用词进行搜索只会产生内容/标题的结果

时间:2018-06-21 17:06:12

标签: wordpress stop-words

我最初的问题是启用按商品属性(颜色)进行搜索并替换搜索词中的某些单词(例如原产地)。

经过一番磨合后,我最终看到了下面的功能,其中匹配的字符串不是从搜索字符串中切出的,而是作为停用词插入的。

只要我在搜索字符串中有多个单词,例如“ t-shirt blue”,就可以正常工作。

但是当搜索字符串仅是“蓝色”时,它仅显示与标准内容/摘录/简短描述匹配的结果,并且似乎没有使用我的功能来提高搜索质量。

功能1:

function add_to_stopwords($stopwords) {

    $terms = get_terms( array(
            'taxonomy' => 'pa_farbe',
            'hide_empty' => true,
             ));

    $farben = array();

    foreach ($terms as $term){
        $farben[] = $term->name;
    }

    $stopwords = array_merge ($stopwords,$farben);
    return $stopwords;

}
add_filter( 'wp_search_stopwords', 'add_to_stopwords');

功能2:

add_filter('pre_get_posts','add_color_to_search');

function add_color_to_search($query){

    if ($query->is_search) {

        $search = sanitize_text_field($query->get('s'));

        $terms = get_terms( array(
            'taxonomy' => 'pa_farbe',
            'hide_empty' => true,
        ) );

        $farben = array();

        foreach ($terms as $term){

            $farben[] = $term->name;

        }

        $farben = array_map('strtolower',$farben);
        $search = strtolower($search);

        $tax_query = $query->get( 'tax_query' );
        if(empty($tax_query)){$tax_query = array();}


        $expl = explode(' ',$search);

        foreach ($expl as $key => $value){

            if(in_array($value,$farben,true)){

                $tax_query[] = array(
                    'taxonomy' => 'pa_farbe',
                    'field' => 'name',
                    'terms' => $value,
                    'operator' => 'IN'
                );

                $query->set( 'tax_query', $tax_query );

            }

        }

    }

    return $query;

}

0 个答案:

没有答案