0

我们已经接管了一个网站。有一种称为“项目”的自定义帖子类型。

如果我们在 上使用“学习”一词进行搜索frontend,结果不会显示标题为“Caulfield Grammar School, Masterplan & Learning Project”的项目,即使标题中有“学习”一词。然而,如果我们使用“Caulfield”这个词进行搜索,它就会出现在搜索结果中。

该站点正在运行Relevanssi,即使禁用它,搜索结果也不会出现。任何想法将不胜感激。

提前致谢。

4

2 回答 2

0

请在functions.php中尝试以下代码

add_filter( 'pre_get_posts', 'mjt_project_search' );
function mjt_project_search( $query ) {

    if ( $query->is_search ) {
    $query->set( 'post_type', array( 'projects') );
    $query->set( 'post_status', array( 'publish') );
    }

    return $query;

}

/*custom texonomy */
function mjt_search_where($where){
  global $wpdb;
  if (is_search())
    $where .= "OR (t.name LIKE '%".get_search_query()."%' AND {$wpdb->posts}.post_status = 'publish')";
  return $where;
}

function mjt_search_join($join){
  global $wpdb;
  if (is_search())
    $join .= "LEFT JOIN {$wpdb->term_relationships} tr ON {$wpdb->posts}.ID = tr.object_id INNER JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id INNER JOIN {$wpdb->terms} t ON t.term_id = tt.term_id";
  return $join;
}

function mjt_search_groupby($groupby){
  global $wpdb;

  // we need to group on post ID
  $groupby_id = "{$wpdb->posts}.ID";
  if(!is_search() || strpos($groupby, $groupby_id) !== false) return $groupby;

  // groupby was empty, use ours
  if(!strlen(trim($groupby))) return $groupby_id;

  // wasn't empty, append ours
  return $groupby.", ".$groupby_id;
}

add_filter('posts_where','mjt_search_where');
add_filter('posts_join', 'mjt_search_join');
add_filter('posts_groupby', 'mjt_search_groupby');
于 2018-01-31T06:28:04.853 回答
0

这有点奏效,但还有其他帖子类型需要显示结果,所以我将代码更改为:

add_filter( 'pre_get_posts', 'mjt_project_search' );
function mjt_project_search( $query ) {

    if ( $query->is_search ) {
    $query->set( 'post_type', array( 'projects', 'news', 'award', 'person', 'location', 'page') );
    $query->set( 'post_status', array( 'publish') );
    }

    return $query;

}

这已经奏效,但现在没有显示“Caulfield Grammar School,Masterplan & Learning Project”。

于 2018-02-01T22:03:19.097 回答