我最初的问题是启用按商品属性(颜色)进行搜索并替换搜索词中的某些单词(例如原产地)。
经过一番磨合后,我最终看到了下面的功能,其中匹配的字符串不是从搜索字符串中切出的,而是作为停用词插入的。
只要我在搜索字符串中有多个单词,例如“ 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;
}