缓慢的搜索查询-如何排除页面、媒体、摘录、作者、私人帖子?

时间:2017-09-24 作者:Ciprian

所以我从查询监视器中得到了这个:

AND (((zp_posts.post_title LIKE \'%mercedes%\')
OR (zp_posts.post_excerpt LIKE \'%mercedes%\')
OR (zp_posts.post_content LIKE \'%mercedes%\'))) 
AND zp_posts.post_type IN (\'post\', \'page\', \'attachment\')
AND (zp_posts.post_status = \'publish\'
OR zp_posts.post_author = 1
AND zp_posts.post_status = \'private\') 
ORDER BY zp_posts.post_title LIKE \'%mercedes%\' DESC, zp_posts.post_date DESC
我希望搜索查询仅针对post\\u标题和post\\u内容,排除所有其他部分。有没有实现这一目标的想法?

1 个回复
最合适的回答,由SO网友:WebElaine 整理而成

您应该能够使用pre_get_posts 更改查询。我建议您创建一个自定义插件,这样,如果您更改了主题,您的修改仍将适用。

要开始,您可以通过以下方式设置要搜索的帖子类型:

function search_filter($query) {
  if ( !is_admin() && $query->is_main_query() ) {
    if ($query->is_search) {
      $query->set(\'post_type\', array( \'post\' ) );
    }
  }
}

add_action(\'pre_get_posts\',\'search_filter\');
您将继续添加$query->set 条件中的语句,以进一步自定义要搜索的字段。

另一种选择是编写一个完全自定义的查询,并从搜索中调用它,而不是使用WP的内置查询。您可能希望对该解决方案进行基准测试,以查看它是否比pre_get_posts 方法

结束