建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

构建您自己的自定义 WordPress 搜索

GG网络技术分享 2025-03-18 16:05 0


WordPress 搜索功能备受诟病,有许多插件可用于添加增强功能,但它们并不总能提供您想要的东西,尤其是当您尝试构建具有特定要求的辅助搜索引擎时。

在本文中,我们将了解构建您自己的自定义 WordPress 搜索并在此过程中发现一些令人惊讶的 WordPress 搜索秘密是多么容易。

AMC Javelin 定制蓝色硬顶与增压 AMC V8 的照片。
拉扯您的 WordPress 搜索!

尽管有许多插件可以增强 WordPress 搜索,从按相关性排序到添加方面搜索到在搜索中包含自定义字段,但在某些情况下,任何插件组合都不能完全满足您的需求,您别无选择,但弄脏你的手,自己写。

在本文中,我将引导您完成一个自定义搜索案例研究。 您会发现构建自己的搜索页面实际上并不难,并且您会发现内置搜索功能的一些隐藏功能。

但在我这样做之前,让我们看看通过将自己的搜索表单放在一起可以实现什么。

通过扩展搜索表单扩展 WordPress 搜索

WordPress 搜索的背后是 WP_Query 班级。 如果您以前使用自己的自定义循环做过任何工作,那么您可能会熟悉 WP_Query.

WP_Query 有一堆可能的参数,其中许多可以简单地在搜索表单(或直接在 URL)中指定,这将改变搜索行为。

例如,要将普通搜索转换为对名为 product 的自定义帖子类型的搜索:

http://www.yoursite.com/?s=football&post_type=product

这只会返回结果 产品 标题或内容包含单词的自定义帖子 足球.

如果你看透 WP_Query 参数列表(它非常广泛)您会发现一大堆基于字符串和整数的参数,您可以简单地在 URL 上编码以更改搜索行为,从包括和排除类别到添加分类搜索以将搜索限制为某些作者。

[Remember, it is only a search if the s parameter is included in the URL.]

还有一些您不会发现列出的额外参数可以显着改变行为,但令人惊讶的是,这些参数没有记录在 Codex 中。

按短语搜索

默认情况下,WordPress 按关键字搜索。 这意味着当通过搜索查询时 足球鞋, WordPress 为 WHERE 子句构建以下内容:


((wp_posts.post_title LIKE '%football%') OR
(wp_posts.post_content LIKE '%football%'))
AND
((wp_posts.post_title LIKE '%boots%') OR
(wp_posts.post_content LIKE '%boots%'))

如您所见,这不是短语搜索,而是搜索 足球 在标题或内容中 靴子 在标题或内容中。 所以,一个帖子有 开机 在标题和 足球 内容将匹配,这可能不是搜索者真正想要的。

但是,您可以让 WordPress 进行短语搜索,只需添加 句子=1 到将 WHERE 子句更改为的 URL:


((wp_posts.post_title LIKE '%football boots%') OR
(wp_posts.post_content LIKE '%football boots%'))

现在搜索的是短语,标题或内容必须实际包含 足球鞋 被发现。 通过搜索然后添加在您自己的网站上尝试此操作 &句子=1 到 URL,看看这对结果有什么影响。

寻找精确匹配

相关 句子 但更具体的是 精确的. 添加 准确=1 到 URL 将 WHERE 子句更改为:


((wp_posts.post_title LIKE 'football boots') OR
(wp_posts.post_content LIKE 'football boots'))

而不是玩现货的差异,我会告诉你,之间的唯一区别 句子 WHERE 子句和 精确的 WHERE 子句是删除 % 围绕 LIKE 语句中的短语。 但是,这种删除会产生很大的不同,因为现在标题或内容必须与搜索查询匹配,而不仅仅是包含它。

所以,如果没有产品有标题 足球鞋 那么就没有结果了。 利用 精确的 小心。

自定义搜索表单

默认的 WordPress 搜索表单非常简单:







如果我们想改变搜索行为,那么,我们需要做的就是将我们自己的字段添加到表单中。









此搜索表单在提交时将生成以下 URL:

http://www.test.dev/?s={query}&sentence=1&post_type=product

它仍将调用默认搜索结果页面,但这些结果将针对在标题或内容中包含搜索短语的产品自定义帖子类型。

构建您自己的搜索表单的最简单方法(假设您希望保留默认表单)是创建一个新的页面模板,其中包含根据您的要求编码的搜索表单并将其分配给特定页面。

但是,如果您想更新默认搜索表单(例如触发短语搜索),假设您的模板没有将搜索表单硬编码到模板中,您有两个选项:

  1. 第一个是将您的自定义搜索表单放入名为的模板文件中 搜索表单.php. 每当 get_search_form() 函数被调用,它将首先查找并使用此模板。
  2. 二是使用 get_search_form 过滤替换以强制 WordPress 使用您的自定义搜索表单。

这两种技术都在 WordPress Codex 中有详细描述。

当自定义表单不够用时

尽管您可以使用自定义表单做很多事情,但在某些情况下您需要自己构建 WP_Query 并处理结果,特别是在添加第二个搜索功能时。

案例研究背景

本案例研究涉及一个销售实体和数字产品组合的组织的电子商务网站。 大多数数字产品是两本杂志的过刊,以及纸质和数字格式的小册子。

该组织希望提供一个“图书馆”搜索,允许访问者仅在杂志和小册子中搜索某些短语(杂志的内容中有完整的内容列表)。 虽然该网站已经进行了产品搜索,但结果不太令人满意,因为:

  • 经常有太多不相关的结果
  • 包括所有产品
  • 没有说明搜索词的匹配位置,搜索结果只是产品图片

为了使当前的搜索保持完整,我们构建了一个新的搜索功能:

  • 强制按短语而不是关键字搜索
  • 将搜索限制在杂志和小册子类别
  • 显示并突出显示包含搜索短语匹配的文本

前两个要求实际上可以通过以下自定义搜索表单来实现:










但是,这对搜索列表布局和搜索短语的突出显示没有帮助,因此构建了一个新的页面模板并将其分配给一个新的专用页面。

这是模板中的主要逻辑:

如您所见,该表单几乎是标准的 WordPress 表单,因为所有的操作都是 WP_Query 调用是通过编码完成的,其中:

  • post_type 设置为产品
  • 句子 设置为 1 以触发短语搜索
  • 添加了分类参数以将搜索限制为三个产品类别
  • ordering 设置为 date 和 menu_order 降序
  • 所有帖子都将被退回

请务必注意,此解决方案中没有分页。 对于自定义的特定搜索,分页并不总是必要的,尤其是在触发短语搜索的情况下。

一旦 WP_Query 执行它是输出任何搜索结果的问题。 您会注意到,如果没有搜索结果,则会显示一些相关产品,以尝试将访问者留在页面上。

输出结果需要两个附加功能,一个是提取包含匹配搜索短语的文本,另一个是突出显示短语本身。

只需使用简单的正则表达式即可突出显示该短语。

提取包含搜索短语的文本并不容易。 每个产品的内容都使用了一种标准方法,即在带有标题和描述的无序列表中列出内容,但试图找到一个正则表达式来拉出列表项,这对我有很大帮助,所以我求助于字符串操纵。

但是,结果非常好:

带有短语突出显示的搜索结果页面的屏幕截图
按短语而不是关键字搜索可显着提高结果

当您想要第二次搜索时自定义完美

当您想要添加第二个搜索功能以与主要搜索功能一起运行并且具有真正的特定要求时,自定义搜索表单和功能非常适合。

在许多情况下,您可以通过简单的自定义搜索表单来实现您想要的,该表单将适当的参数传递给内置的搜索功能。 在着手构建您自己的自定义搜索功能之前,您可以轻松地对此进行测试,方法是将适当的查询变量添加到标准搜索 URL 并查看您是否获得所需的结果。

也就是说,编写自己的搜索功能并不困难,并且可以访问更大范围的参数来控制搜索行为。

标签:

标签: WordPress 教程

提交需求或反馈

Demand feedback