问题描述

我正在使用 WordPress 搜索来搜索一系列自定义帖子类型,并允许用户将 drill-down 转换为每个单独的帖子类型。

但是我发现 WordPress 没有返回到我以前认为是’best’ 比赛的第一个。例如,如果我搜索 Microsoft,那么包含该术语不定期的页面仍然在经常使用该术语的页面之前返回。

基本上我试图找到一些关于 WordPress 如何排列页面并确定相关性的信息,如果我可以影响这一点,而无需安装任何插件。

任何帮助非常感谢。

最佳解决方案

编辑 – 当前版本的 WordPress 支持相关性,所以这个答案不再准确。


没有等级或相关性的概念,它只是一个简单的 LIKE 查询的标题和内容:

($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}')

您可以使用 posts_search 过滤器修改或完全替换您自己的搜索查询。来自/wp-includes/query.php

// Allow plugins to contextually add/remove/modify the search section of the database query
$search = apply_filters_ref_array('posts_search', array( $search, &$this ) );

另请参阅 WP_Query Codex 页面上的可用查询过滤器。

次佳解决方案

由于 WordPress 3.7 (October 2013),搜索结果按照以下条件排序 (参见 ticket 7394):

  • 完整的句子匹配在职位。

  • 邮件标题中的所有搜索字词。

  • 邮件标题中的任何搜索字词。

  • 完整的句子匹配在帖子内容。

然后每个部分和任何剩余的职位按日期排序。

还有新的过滤器:

  • wp_search_stopwords,用于过滤 WHERE 中忽略的停止字。

  • posts_search_orderby 在订购搜索结果时过滤 ORDER BY

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。