要点总结
- WooCommerce默认搜索存在三大缺陷:无法通过描述查找、不支持变体属性、缺乏自动补全,导致大量用户流失且无法追踪。
- FiboSearch构建自定义搜索索引并采用TF-IDF评分算法,即使在数万SKU的商店中也能实现近乎瞬时的搜索速度。
- 专业版支持AJAX自动补全下拉菜单,展示产品图片、价格、SKU和描述,并可通过Vue组件即时渲染,显著提升交互体验。
- 支持SKU、变体属性、自定义字段(含ACF)以及三级模糊匹配,能准确响应“蓝色 38”或“Coffee”等查询,大幅降低未找到结果率。
- 内置搜索查询统计功能,记录每次搜索内容及未返回结果的情况,帮助店主优化商品信息与库存策略。
- 无需修改CSS即可通过选项面板个性化搜索栏样式,并提供简码、Gutenberg区块、小部件等五种嵌入方式,灵活适配各类主题。
我审核过的 WooCommerce 商店多到数不清,但模式却出奇地一致:店主花几个小时精心设计首页,反复斟酌横幅广告,甚至花钱请设计师重做产品卡片的悬停效果。结果,搜索框却纹丝不动,搜索“蓝色棉质T恤”总是显示“未找到结果”,而三个描述中明明包含“棉质”字样的产品却根本搜不到。
在最终选择 FiboSearch 之前,我已经尝试了所有可能的解决方案。WooCommerce 内置的搜索功能几乎搜不到任何东西(标题加一点文章内容)。我用 Relevanssi Premium 修补过这个问题,它对内容型网站来说还算凑合,但当需要在下拉菜单中显示产品卡片时就显得非常笨拙。我还尝试过使用 ElasticPress 和自托管的 Elasticsearch 集群,但对于小规模用户来说过于复杂,而对于大规模用户来说维护成本又很高。我还搭建了 Algolia,它的确运行良好,但一旦超过免费套餐就需要付费了。我甚至还自己编写了一个 JavaScript 自动补全功能,?s=并添加了一个 AJAX 端点,但我并不建议这样做两次。
FiboSearch(底层仍然叫做“WooCommerce Ajax Search”)占据着一个特殊的位置。它并非最通用的搜索引擎,但它深谙 WooCommerce 商店的需求:产品图片、价格、SKU、变体、分类、品牌、缺货筛选,以及一个与现代商店风格一致的下拉菜单,而不是 2014 年 jQuery 自动完成插件的粗糙界面。而且,它无需向服务器发送任何查询即可实现所有这些功能。
本文将详细介绍 FiboSearch 的功能、工作原理、初始设置步骤,以及我希望在将其应用于拥有 12,000 个 SKU 的产品目录之前有人告诉我的一些事项,并提供完整的开发者参考。读完本文,您将完全了解该插件在后台的运行机制,并判断它是否适合您运营的商店。
FiboSearch是什么?
FiboSearch 是一款由FiboSearch 团队(前身为 DGoraWcas,因此dgwt/wcas/您仍然会在钩子中看到其命名空间)开发的 WordPress 高级插件。它的功能单一但非常出色:它用产品感知自动完成功能替换了 WooCommerce 的默认搜索功能,该功能会在您输入时将搜索结果显示在下拉列表中。
免费版可在 WordPress.org 代码库中找到,而且确实非常实用。我们这里介绍的是专业版,它完全替换了搜索引擎。FiboSearch Pro 不会在每次按键时都进行查询,而是在一组自定义表中构建自己的可搜索索引,并对该索引运行 TF-IDF 式的评分算法。即使在拥有数万件商品的商店中,搜索速度也几乎是瞬时的。
如果您之前没用过,这里快速介绍一下。当用户在 FiboSearch 搜索栏中输入“leath”(皮革)时,插件会向自定义端点发送一个 AJAX 请求,查询其索引,返回匹配产品的 JSON 数据,然后 Vue 2 组件会渲染一个下拉卡片列表。每张卡片包含产品图片、标题(匹配的子字符串会加粗显示)、SKU、简短的描述和价格。点击卡片即可直接进入产品页面。按下回车键则会跳转到 WooCommerce 搜索结果页面,FiboSearch 也会接管该页面。
这就是产品。现在我们来谈谈它存在的意义。

为什么 WooCommerce 的搜索功能默认如此糟糕
如果您已经体验过 WooCommerce 搜索功能,可以跳过这部分。如果您还没有体验过,那么接下来这部分内容只有在您开店三个月后才会被提及。
WooCommerce 继承了 WordPress 的?s=搜索功能。WordPress 搜索会根据文章类型进行筛选LIKE '%query%',wp_posts.post_title基本wp_posts.post_content就是这样。WooCommerce 会接入该搜索,将搜索结果按product文章类型进行过滤,并可选择性地包含 SKU 字段。仅此而已。
这意味着默认的 WooCommerce 搜索功能存在三个很大的缺陷。
第一,除非你专门启用该功能,否则它无法通过描述内容查找产品,即使启用了该功能,LIKE模式匹配速度也很慢,而且没有排名。
第二,它无法根据属性值查找变体。例如,如果购物者搜索“蓝色 38”,而某款 T 恤衫的变体是“蓝色 / 38”,则搜索结果中不会出现该变体。
第三,没有自动补全功能。顾客输入关键词,按下回车键,进入搜索结果页面,浏览商品,没找到想要的,就放弃了。店主对此毫不知情,因为没有任何记录显示查询内容和搜索结果。
FiboSearch 弥补了这三个方面的不足。索引器会采集标题、描述、简短描述、SKU、属性、分类术语以及您配置的任何自定义字段。自动完成功能会在您输入时显示结果。专业版还会记录每次查询,wp_dgwt_wcas_stats以便店主查看搜索内容以及哪些内容没有返回任何结果。
WooCommerce 的默认搜索功能将搜索视为一项功能,而 FiboSearch 则将其视为进入商店的入口。
主要功能概览
与其抛弃营销清单,不如看看真正能改变实体店体验的因素。
- AJAX自动完成下拉菜单。输入时,以样式化的下拉菜单形式提供产品建议,包括产品图片、价格、SKU和简短描述。可对每个元素进行配置。
- 自定义搜索索引存储在
wp_dgwt_wcas_index[此处应填写相关库名称]。索引会随着产品的保存或删除而逐步重建,并可从“索引器”选项卡按需完全重建。 - 采用TNT风格的TF-IDF评分。Pro引擎按相关性对结果进行排名,而不是按最后修改日期或数据库随机顺序排名。
- 支持按 SKU 搜索,包括可变产品 SKU。对于顾客知道零件编号的商店来说,这项功能是该插件最有价值的地方。
- 在产品属性中进行搜索,以便像“红色 XL”这样的查询能够找到正确的变体。
- 支持在自定义字段(例如 ACF)中搜索,包括 ACF 表(仅限专业版)。可用于查找 ISBN、型号和供应商代码。
- 模糊匹配,分为三个级别(关闭、正常、强)。允许拼写错误。“Coffee”仍然匹配“Coffee”。
- 搜索结果按下拉菜单中的类型分组。首先是类别,然后是标签,最后是产品。分组方式可配置。
- 详情面板会在鼠标悬停或聚焦时打开,并显示扩展的产品信息,包括下拉菜单中的“添加到购物车”按钮和数量字段。
- 在可配置的断点(默认 992px)下方,移动端叠加层会占据整个屏幕,提供更适合拇指操作的搜索体验。
- 您可以通过简码、Gutenberg 区块、小部件、菜单项或主题调用来嵌入搜索栏
do_shortcode。共有五种方法。 - 无需修改 CSS即可个性化搜索栏样式。背景颜色、文本颜色、边框、放大镜图标、占位符文本、提交按钮标签,所有设置均可在选项中完成。
- 搜索历史记录存储在客户端,
localStorage以便回访用户点击搜索栏后即可看到他们之前的搜索查询。 - WooCommerce 搜索结果页面全覆盖。该插件会替换默认的结果查询,因此常规
?s=URL 也能受益于 FiboSearch 索引。 - 搜索分析(专业版)。热门搜索、无结果搜索以及“关键短语”面板,该面板会显示多次搜索但未返回任何结果的查询。
- 支持 WPML、Polylang、qTranslate-XT 和 TranslatePress 集成(专业版)。自动构建每种语言的索引。
- 如果您使用 WooCommerce Brands 插件或任何受支持的品牌分类法,即可提升品牌知名度。
- 支持 B2BKing、MemberPress、Booster for WooCommerce、WooCommerce Memberships、WooCommerce Protected Categories 等插件集成。集成层会读取每个插件的可见性规则,确保会员专享产品不会出现在未登录用户的搜索结果中。
这些功能大部分默认开启。少数功能(例如分析、自定义字段索引)可在相应的设置选项卡中切换。

索引器实际工作原理
这正是 FiboSearch 与“在 WordPress 默认搜索框上添加 JS 下拉菜单的搜索插件”的区别所在。专业版引擎是一个真正的搜索索引,而不是查询封装器。
当索引器运行时(手动或通过 cron),它会遍历每个已发布的产品并写入两种类型的行。
首先是可读索引:预渲染的 HTML 代码,用于在建议下拉菜单中显示该产品的相关信息,包括图片 URL、标题、格式化价格、SKU 和产品摘要。这意味着 AJAX 响应本质上是一个SELECT ... WHERE id IN (...)直接的 HTML 代码wp_dgwt_wcas_index,搜索时无需进行任何格式化处理。这正是速度提升的关键所在。
第二个是可搜索索引:每个语言的 TF-IDF 表(wp_dgwt_wcas_si_wordlist,,wp_dgwt_wcas_si_doclist)wp_dgwt_wcas_si_cache,存储每个产品中的每个词,以及包含该词的文档(产品)和出现频率。当收到查询时,FiboSearch 会将其分词,在词表中查找每个词元,找到包含这些词元的文档,并根据 TF-IDF 分数加上一些 WooCommerce 特有的乘数(例如,SKU 完全匹配的排名高于标题模糊匹配的排名)对它们进行排名。
分类术语有自己的表格(wp_dgwt_wcas_tax_index)。变体也有自己的表格()。市场设置中wp_dgwt_wcas_var_index有一个供应商索引( )。wp_dgwt_wcas_ven_index
索引器在后台运行,使用自定义心跳机制(dgwt_wcas_build_index_heartbeat)和 WordPress 定时任务。对于小型商店,初始构建只需不到一分钟即可完成。对于包含 5 万件商品且启用完整描述的目录,首次构建预计需要 10 到 30 分钟。之后,更新是增量式的:保存商品只会触发该商品的重新索引,而不会重新索引整个目录。

这里存在一个值得注意的权衡。当您更改搜索范围(例如,启用“在描述中搜索”)时,Pro 索引必须重建,而在重建过程中,自动完成功能会回退到 WordPress 原生搜索引擎。该回退引擎LIKE使用的查询与 WooCommerce 默认搜索使用的查询相同,因此效果不如 Pro 原生搜索引擎。如果您拥有庞大的产品目录并且要更改设置,请务必在流量较低的时段进行操作。
安装和第一个小时
专业版插件以单个 zip 文件的形式提供。通过“插件”>“添加新插件”>“上传”,然后激活即可。首次激活时,FiboSearch 将执行以下操作:
- 通过以下方式创建其自定义表(
wp_dgwt_wcas_index、、wp_dgwt_wcas_tax_index等)dbDelta。 - 安排其后台索引程序 cron。
- 添加顶级 FiboSearch 菜单和 WooCommerce 下的子菜单。
- 触发后台初始完整索引构建。运行期间,访问索引器选项卡即可看到进度条。
设置页面是一个“入门”选项卡,它会引导您了解五种嵌入方法。说实话,这是我见过的 WooCommerce 扩展程序中最简洁的引导页面之一。没有设置向导,也没有“告诉我们您的商店信息”之类的冗长说明。只有:搜索栏放在这里,短代码在这里,赶紧开始吧!

在大多数主题中,最简单的方法是使用菜单项。依次点击“外观”、“菜单”,从左侧展开“FiboSearch 栏”,然后将其拖放到主菜单中。就完成了。搜索栏会取代菜单项的位置,并继承主题的样式,通常一次就能正确显示。
其他路径则更加灵活。[fibosearch]短代码可以放置在任何短代码可以放置的位置,包括 Gutenberg 区块、Bricks 元素、Elementor 小部件或 Beaver Builder 模块中。小部件版本用于侧边栏和页脚。Gutenberg 区块版本用于新编辑器和 theme.json 设置。PHP 调用(<?php echo do_shortcode('[fibosearch]'); ?>)用于主题模板文件,以便在需要硬编码位置时使用。
选择一个即可。不要同时在三个地方添加搜索栏。插件每个页面只加载一次资源,但三个搜索栏看起来会很混乱。
每个设置选项卡的导览
FiboSearch 带有六个设置标签页。每个标签页都很简洁明了,我很欣赏这一点。它没有那种因为设置memory_limit过低而导致程序崩溃的“全部设置”标签页。
开始
“开始”选项卡包含嵌入说明和一个快速“我在哪里”面板。只需使用一次。之后,您就可以将时间花在其他五个选项卡上了。
搜索栏
此选项卡控制搜索输入框的可见用户界面,包括占位符文本、放大镜图标的可见性、提交按钮标签以及移动端叠加层的触发断点。右侧的实时预览会随着您更改设置而更新,这正是所有 WordPress 设置页面应有的工作方式。
我在这里总是更改两个设置:对于桌面标题栏较窄的商店,我会将断点增加到 1024px;我会设置一个占位符来暗示商店销售的内容(“搜索鞋子、品牌、型号……”比通用的“搜索产品……”更好)。
这是最重要的选项卡。它控制下拉菜单中显示的内容。

基本模块控制最大建议数量(默认为 7)和“无结果”标签。接下来是产品切换开关:显示图片、显示价格、显示 SKU、显示描述。然后是非产品切换开关:显示类别、显示标签、显示品牌(如果您使用品牌分类法)、在顶部显示特色产品。
我建议默认启用两项功能。第一,如果您的客户知道零件编号,请启用“显示 SKU”。这在工业和电子产品商店中非常实用。第二,除非您的产品描述简短且一致,否则不要在下拉菜单中显示描述。过长的描述会使下拉卡片的高度超出舒适范围,最终导致移动设备上的三个建议填满整个视口。
搜索配置
这是搜索范围选项卡。FiboSearch 在尝试匹配查询时,实际会查找哪些内容?

默认设置为“仅标题”,这限制了显示内容。我总是启用描述、简短描述和 SKU。属性和品牌取决于商品目录。如果您销售 T 恤,属性(例如尺寸、颜色)就很重要。如果您销售书籍,品牌可能就无关紧要了。
这里有一个自定义字段输入框,接受以逗号分隔的元键列表。您可以将其用于输入 ISBN、型号、制造商零件编号等信息。Pro 引擎会将它们正确地索引到可搜索的索引中,因此按 ISBN 搜索的速度与按标题搜索的速度一样快。
“模糊度”下拉菜单包含“关闭”、“正常”和“强”三个选项。“关闭”适用于所有产品名称都独一无二的目录,客户能够准确了解自己想要什么。“正常”是几乎所有情况的默认设置。“强”适用于分析数据显示大量因拼写错误导致的无结果搜索的情况。
分析
“分析”选项卡包含两部分。顶部是一个小型设置面板(启用、排除角色、保留天数)。面板下方是实际的仪表盘。
分析仪表盘是我最喜欢的插件功能之一。我将在下面的章节中详细介绍它。
索引器
索引状态、上次构建时间、“重建索引”按钮,以及一个“显示详情”展开器,其中列出了每个子索引的记录数。如果发现任何问题,首先应该查看此选项卡。此外,该插件还会在此处显示故障通知(例如,构建过程中 PHP 内存耗尽),而不是将其忽略。
在主题中嵌入搜索栏
在页面上放置工具栏有五种方法,具体使用哪一种取决于你的主题结构。
作为菜单项。最适合已有顶部导航的主题。“FiboSearch bar”项可以嵌入菜单,继承菜单的 CSS 样式,即插即用。80% 的商店都应该采用这种方式。
作为 Gutenberg 区块。该插件会注册一个dgwt/wcas/search-bar区块。您可以将其拖放到任何文章、页面或全站编辑器模板中。它适用于 theme.json 主题(例如 Twenty Twenty-Four、Spectra、GeneratePress 区块主题),因为您可以在编辑器中直接编辑布局。
作为小部件, “FiboSearch bar”小部件会出现在“外观”>“小部件”中。如果您的主题仍然使用侧边栏或页脚小部件区域,则此小部件非常有用。
作为短代码, [fibosearch]它可以出现在任何短代码出现的地方。这是规范别名。虽然还有一些旧版别名(例如 `<style>`[wcas-search-form]和 `<style> [search]`)仍然有效,但建议[fibosearch]在新安装时使用 `<style>`,因为`<style> [search]` 会与某些主题短代码冲突。
在 PHP 中, <?php echo do_shortcode('[fibosearch]'); ?>这是在 `<head>` 标签或自定义模板部件中正确的调用header.php。插件会在检测到短代码时将其资源加入队列,因此它能正常工作。
关于主题的提示:工具栏会继承主题样式表中的字体和颜色,但它有最小高度和内部内边距限制,某些主题可能与之冲突。如果工具栏第一次显示不正确,请检查“外观”、“自定义”、“附加 CSS”,并覆盖其样式.dgwt-wcas-search-input { line-height: 1; padding: 0.6em 0.8em; }以匹配您主题的输入样式。
分析小组:哪些内容值得关注
FiboSearch Pro 相比免费版增加了许多功能,但我认为分析面板本身就足以值回票价。

每次搜索查询都会被记录,wp_dgwt_wcas_stats包括搜索词、返回结果数量、时间戳、用户角色和语言(如果支持多语言)。仪表盘将这些信息分为三个实用视图。
过去 30 天的总搜索量,分为自动补全触发的搜索和搜索结果页面搜索。这有助于衡量访客是否使用了搜索栏。
按搜索频率排序的热门搜索。这是“我的顾客想要什么”的列表。通过查看这个列表,我发现了一些本应出现在首页的产品。我还发现了一些当时还没有但显然应该有的产品(很多顾客都在搜索我们没有销售的品牌)。
关键搜索无果。查询结果为零且被搜索多次。这就是“我目前正在流失销售额”的清单。清单上的每一项都代表一位尝试过但失败的顾客。也许该产品以不同的名称存在。也许它根本不存在,你需要寻找货源。无论如何,这份清单都弥足珍贵。
确实存在一些值得注意的限制。分析功能有一个可配置的数据保留期限(以天为单位)。默认值并不宽裕。对于访问量大的店铺,您可能需要将其延长至 365 天,以便进行同比比较;或者,您也可以通过操作将数据发送到您自己的数据仓库dgwt/wcas/analytics/after_searching,并将 FiboSearch 的表用作短期缓存。
另一个限制是分析功能无法追踪每次会话的购买路径。您可以看到有人搜索了“皮质背包”,但无法得知他们是否在 10 分钟后购买了皮质背包。如果您需要追踪从搜索到购买的归因,请将此插件与 GA4 内部站点搜索跟踪(该插件可以自动触发)或客户数据平台结合使用。
实际应用案例
FiboSearch 真正改变数据的五种场景。
一家拥有 3 万个 SKU 的工业零件商店。顾客带着零件编号前来选购。由于 SKU 字段未被索引,默认搜索功能无法返回任何结果。使用 FiboSearch 后,启用“按 SKU 搜索”和“按 SKU 变体搜索”功能,平均商品查找时间从 45 秒缩短到 5 秒以内。我亲眼见证过不止一次这样的效果。这种情况下的转化率提升非常显著。
一家提供多种尺码的时尚商店。顾客搜索“蓝色 M”。Web 默认的搜索结果并不理想。FiboSearch 会索引商品属性,因此正确的蓝色中号 T 恤会优先显示。顾客可以直接通过详情面板的“加入购物车”按钮,从下拉菜单中选择商品加入购物车。无需跳转到产品页面。流程更高效。
这是一个基于 WPML 的多语言商店。FiboSearch为每种语言构建一个独立的搜索索引。当用户切换语言时,搜索也会自动切换。无需修改lang查询参数或处理重复的文章 ID。只需一个索引任务,两种语言,两个干净的索引。
这是一个销售课程的会员制网站。WooCommerce Memberships将某些产品限制为仅供已登录会员访问。FiboSearch 的 WC Memberships 集成遵循此规则。未登录的访客搜索仅限会员访问的课程时,不会在自动完成列表中看到该课程。而会员则可以。集成层会读取会员规则并在服务器端过滤 JSON 响应。
一家按季节分类的商店。你之前做过一个黑色星期五的促销页面,但到了二月份就忘了。不过,搜索“黑色星期五”的顾客仍然能通过标题找到它。你可以提高搜索的模糊度,让“黑色星期五”也能出现在搜索结果中。或者,你也可以把“黑色星期五”作为标签添加到你当前的主打产品中,这样就能利用品牌/标签索引的优势。
这些并非虚构的场景。“工业零件”的例子让我确信这类插件确实重要。搜索是切入点。做好搜索,否则你的跳出率就会飙升。
开发者参考:钩子、过滤器、类
现在我们来谈谈大多数文章都会略过的部分。FiboSearch 在dgwt/wcas/filter 命名空间下提供了数量惊人的 API。以下才是真正重要的内容。
扩展索引内容
默认情况下,索引器只查看product文章类型。如果您销售实体产品,并将可下载的 PDF 文件作为单独的文章类型,或者您希望将博客文章放在同一个下拉菜单中:
add_filter( 'dgwt/wcas/allowed_post_types', function( $types ) {
$types[] = 'post'; // blog posts
$types[] = 'pdf_guide'; // a custom CPT
return $types;
} );
// Then opt those post types in for indexing
add_filter( 'dgwt/wcas/indexer/post_types', function( $types ) {
$types[] = 'post';
$types[] = 'pdf_guide';
return $types;
} );第一个筛选条件只是允许它们出现在搜索下拉菜单中。第二个筛选条件才是让专业版索引器实际抓取这些文件的关键。
对 ACF 字段和其他自定义元数据进行索引
搜索配置选项卡接受以逗号分隔的元键列表。如果您想以编程方式添加它们(以便设置在数据库迁移后仍然有效)或包含 ACF 子字段:
add_filter( 'dgwt/wcas/indexer/searchable_custom_fields', function( $fields, $product_id ) {
$fields[] = '_isbn';
$fields[] = '_model_number';
// Pull an ACF repeater of feature bullets into a single string
$bullets = get_field( 'feature_bullets', $product_id );
if ( is_array( $bullets ) ) {
$fields[] = implode( ' ', wp_list_pluck( $bullets, 'text' ) );
}
return $fields;
}, 10, 2 );此过滤器在索引构建期间每个产品仅触发一次,因此请勿在其内部调用外部 API。您返回的任何内容都会被标记化、转换为小写,并合并到该产品的可搜索索引中。
更改下拉菜单链接的内容
默认行为是“点击建议,跳转到产品永久链接”。有时您可能需要修改永久链接,例如添加跟踪参数,以便在分析中衡量搜索驱动的点击量:
add_filter( 'dgwt/wcas/search_results/product/url', function( $url, $product_id ) {
return add_query_arg( 'src', 'fibo_search', $url );
}, 10, 2 );如果您的商店使用 AMP 变体、无头前端或多语言设置,而产品 URL 与 WP 生成的永久链接不匹配,那么这也是一个合适的解决方案。
详情面板和建议卡内都设有action插槽系统。您可以将任何内容渲染到这些插槽中,而无需修改插件的模板文件。
add_action( 'dgwt/wcas/details_panel/product/price_after', function( $product ) {
if ( $product->is_on_sale() ) {
echo '<span class="my-sale-badge">Limited time</span>';
}
} );
add_action( 'dgwt/wcas/details_panel/product/container_after', function( $product ) {
$rating = $product->get_average_rating();
if ( $rating ) {
printf( '<div class="my-rating">Rated %s/5</div>', number_format( $rating, 1 ) );
}
} );这些钩子会在 JSON 渲染的 HTML 中触发,因此你输出的任何内容都会通过与下拉菜单其他部分相同的路径进行转义。请勿在此处输出原始用户输入。
将发货分析结果发送到您的仓库
如果您希望每个 FiboSearch 查询都能同步到 Mixpanel、Segment、GA4 服务器端或您自己的数据仓库,请接入以下dgwt/wcas/analytics/after_searching操作:
add_action( 'dgwt/wcas/analytics/after_searching', function( $phrase, $results_count, $context ) {
wp_remote_post( 'https://api.mixpanel.com/track', [
'body' => [
'event' => 'Product Search',
'properties' => [
'phrase' => $phrase,
'results' => (int) $results_count,
'language' => $context['language'] ?? 'en',
'token' => MIXPANEL_TOKEN,
],
],
'timeout' => 2,
] );
}, 10, 3 );超时时间要短(1-2秒)。如果你的分析服务提供商出现故障,你肯定不希望所有搜索请求都因为缓慢的HTTP POST请求而被阻塞。
从分析中排除管理员查询
默认分析功能会记录每一次搜索,包括您在管理员会话中测试自动完成功能时发起的搜索。这会污染“热门搜索”列表。
add_filter( 'dgwt/wcas/analytics/exclude_roles', function( $roles ) {
$roles[] = 'administrator';
$roles[] = 'shop_manager';
$roles[] = 'editor';
return $roles;
} );我总是在第一天就设置好这个。管理团队会在工具栏里输入一些莫名其妙的东西。
调整相关性评分
TNT 引擎会为每个搜索结果分配一个分数。分数越高,在下拉菜单中的排名就越高。默认算法会优先考虑标题匹配,其次是描述匹配,再次是精确匹配,最后是模糊匹配。如果您想将某些产品(例如您的精选系列)推到结果顶部,您可以随时调整分数:
add_filter( 'dgwt/wcas/tnt/product/score', function( $score, $product_id ) {
// Boost products tagged "featured"
if ( has_term( 'featured', 'product_tag', $product_id ) ) {
return $score * 1.5;
}
return $score;
}, 10, 2 );不要滥用倍率。1.5倍的提升幅度足以让产品排名上升一到两位。10倍的提升幅度会让一个相关性不高的精选产品排名高于顾客真正想要搜索的产品,这还不如不提升。
覆盖搜索栏 HTML
大多数主题更改都可以通过设置或 CSS 完成。如果您确实需要不同的 HTML 结构(例如,一个不需要圆角的极简主义主题,或者一个需要不同数据属性的无头 React 前端):
add_filter( 'dgwt/wcas/form/html', function( $html, $args ) {
return '<div class="my-search">'
. '<input type="text" class="dgwt-wcas-search-input my-search-input" placeholder="' . esc_attr( $args['placeholder'] ) . '">'
. '</div>';
}, 10, 2 );关键在于,这个dgwt-wcas-search-input类必须保留在实际的输入元素上,因为 Vue 2 组件是通过类名来选择元素的。如果丢失了该类,下拉菜单就无法加载。
对索引事件做出反应
add_action( 'dgwt/wcas/indexer/status/completed', function() {
error_log( 'FiboSearch finished a full index rebuild at ' . current_time( 'mysql' ) );
do_action( 'my_app/search_index_ready' );
} );
add_action( 'dgwt/wcas/indexer/status/error', function( $error ) {
error_log( 'FiboSearch index error: ' . $error );
} );如果您运行多站点设置并想知道索引重建何时发生或失败,则可以通过 incoming-webhook 将消息发送到 Slack 警报。
添加停用词列表
如果您销售的产品名称中包含“free”、“the”或“and”等词语,默认的停用词列表会悄悄地将它们从索引中移除。您可以解决这个问题:
add_filter( 'dgwt/wcas/indexer/searchable/stopwords', function( $stopwords, $language ) {
if ( $language === 'en' ) {
// Remove "free" from the stopwords so "Free shipping bag" is searchable
$stopwords = array_diff( $stopwords, [ 'free' ] );
}
return $stopwords;
}, 10, 2 );这是一个按语言设置的过滤器。如果您使用 WPML 多语言插件,则需要分别处理每种语言代码。
值得了解的短代码
[fibosearch]:这是官方搜索栏。请使用这个搜索栏。[fibosearch_posts_results]: 拖放到自定义搜索结果页面中,以呈现带有 FiboSearch 排名的分页列表。[wcas-search-form]:旧别名[fibosearch]。仍然有效,以保持向后兼容性。[search]:短别名。请避免使用;它会与某些主题自身的短代码冲突。
WP-CLI
FiboSearch Pro 会注册一个wp fibosearch index命令树。您实际会用到以下两个命令:
# Rebuild the entire index from CLI (faster than the browser indexer on large catalogs)
wp fibosearch index build
# Show current index status
wp fibosearch index status对于拥有 20,000 件以上商品的商店,这种方法比浏览器驱动的 AJAX 索引器快得多,因为每个数据块无需进行 AJAX 往返。每次产品目录发生重大变更后,我都会通过命令行界面 (CLI) 重新构建索引器。
需要了解的数据库表
如果你需要亲自动手调查某些事情:
wp_dgwt_wcas_index:可读索引(预渲染的建议 HTML)wp_dgwt_wcas_tax_index分类索引(类别、标签、品牌)wp_dgwt_wcas_var_index变异指数wp_dgwt_wcas_ven_index供应商索引(市场设置)wp_dgwt_wcas_si_wordlist,,wp_dgwt_wcas_si_doclist:wp_dgwt_wcas_si_cache按语言搜索的索引(TNT 引擎)wp_dgwt_wcas_stats分析记录
设置信息存储在一个单独的选项块中:dgwt_wcas_settings。因此,您可以通过复制这一行数据,在新测试环境中预加载配置。
性能、兼容性和注意事项
在将此产品上架生产商店之前,您需要了解以下三类事项。
内存。索引器在处理大型产品目录时会消耗大量内存,因为它会将产品数据分批加载到内存中并进行处理。如果您使用的是预算有限的主机,PHP 内存限制为 128MB,而产品目录包含 30,000 个产品,那么您会在日志中看到索引器故障,并显示“已用完允许的内存大小”的错误信息。解决方法是将内存限制提高WP_MEMORY_LIMIT到wp-config.php512MB,或者通过命令行界面 (CLI) 运行重建,因为 CLI 的内存限制通常更高。
缓存插件。FiboSearch的 AJAX 端点不能被页面缓存。WP Rocket、WP-Optimize 和 LiteSpeed Cache 都能开箱即用地正确处理这种情况,因为该端点是以对象形式暴露的,?dgwt_wcas=1而不是普通的页面请求。对象缓存(Redis、Memcached)可以正常工作并有所帮助。
描述索引。启用“在描述中搜索”功能会显著增大索引体积,并降低索引器的速度。对于产品描述长达 1000 字的店铺,索引大小很容易增加 4 倍wp_dgwt_wcas_si_wordlist。这在现代 MySQL 数据库中不成问题,但值得注意。如果您的主机方案有 1GB 的数据库上限,请务必留意这一点。
多语言插件的一些小问题。WPML和 Polylang 都能正常工作,但我遇到了一个问题,而且已经遇到两次了。如果您在 WPML 的“字符串翻译”面板中编辑翻译(而不是在产品编辑器中编辑),FiboSearch 并不总是能将此更改识别为“产品保存”事件。翻译会卡在索引中。解决方法是在字符串翻译更改后手动重建索引,或者挂钩到 WPML 的wpml_st_string_translation_complete操作来触发重新索引。如果您需要具体的代码片段,请联系我。
短[search]代码冲突。某些主题会注册[search]自己的短代码。如果两个短代码都处于活动状态,则后加载的短代码生效。使用[fibosearch]后即可忽略别名的存在。
WooCommerce HPOS。FiboSearch与 HPOS 兼容。索引器读取的是文章表,而不是订单表,因此 HPOS 迁移不会对其产生影响。已在启用 HPOS 的 WooCommerce 8 和 9 版本商店中验证。
订阅产品。WooCommerce订阅产品的各种变体会像其他可变产品一样显示在下拉菜单中。显示的价格是常规价格,而不是按周期计费的价格。如果您的订阅定价比较复杂,请使用筛选dgwt/wcas/indexer/readable/index_html_price器覆盖显示的价格,使其显示“$X/月”而不是“$X”。
常问问题
FiboSearch 是否与我的页面构建器兼容?
Elementor、Bricks、Divi、Beaver Builder、Oxygen 和 Bricks 都能完美兼容。短代码可在任何页面构建器的内容块中使用。此外,Pro 插件还专门附带了一个 Elementor 小部件。
它是否兼容 WPML / Polylang?
是的,两者都有。Pro 会为每种语言构建一个独立的、可搜索的索引,而集成层则会从 WPML/Polylang 的全局变量中读取当前使用的语言。需要注意的是,WPML 字符串翻译的更改并非总是会触发重新索引,我在“注意事项”部分已经提到过这个问题。
会降低我的网站速度吗?
简而言之:不,它反而能加快搜索速度。速度略微变慢的页面是索引器运行时的管理页面(它会占用一些后台 CPU 资源)。前端搜索本身比 WooCommerce 默认搜索更快,因为它跳过了wp_posts索引器,直接使用预先构建的索引。
它会替换 WooCommerce 搜索结果页面,还是只替换自动完成功能?
两者兼备。自动补全功能是其主要亮点,但 FiboSearch 还会覆盖?s=搜索结果页面上的查询,因此它使用相同的索引。排名相同,模糊匹配也相同。
我可以把它和 Relevanssi 或 SearchWP 一起使用吗?
您可以同时安装它们,但一次只能有一个插件控制搜索结果页面。如果您需要Relevanssi Premium搜索博客文章,需要 FiboSearch 搜索产品,请将每个插件分别限定于其对应的文章类型,这样它们就可以共存。SearchWP也适用同样的规则。
它是否索引自定义文章类型?
是的,可以使用上面显示的dgwt/wcas/allowed_post_types筛选dgwt/wcas/indexer/post_types器。下拉菜单可以按类型显示混合结果(产品、博客文章、文档)。
下拉菜单在移动设备上能正常工作吗?
确实如此,在可配置的断点下方还有一个专门的移动端叠加模式。在小屏幕上,该工具栏会展开成全屏叠加层,并提供更大的、便于触摸的输入框。
Gutenberg 全站编辑功能怎么样?
该插件提供了一个dgwt/wcas/search-bar可在网站编辑器中使用的代码块。您可以将其放入页眉模板部分,即可完成设置。
我的SEO会受到影响吗?
该插件不会修改 URL 结构或核心页面输出(它只会添加搜索栏并覆盖搜索查询)。对 SEO 的影响为零。
总结
WooCommerce 自带的搜索框功能简陋,几乎算不上真正的搜索引擎。对于小型商店来说,这或许够用。但一旦你的产品种类繁多、SKU 为客户熟知、产品描述包含可搜索内容,或者你的商店支持多种语言,那么默认的搜索功能就会成为销售漏斗中的一大漏洞。
FiboSearch 比我测试过的任何插件都更能填补这一空白。免费版功能齐全且实用。如果您的产品目录已经相当丰富,那么专业版才是您的理想之选。它的自动补全功能速度极快,因为它直接读取真实索引,而非依赖其他搜索引擎LIKE。wp_posts如果您能根据分析面板提供的数据采取动作,那么单凭它就值回票价。此外,开发者 API 的设计也非常周到,这在您最终需要将搜索数据传输到数据仓库或提升特定产品排名时至关重要。
它的不足之处微乎其微。默认的分析数据保留时间比我预期的要短。WPML 字符串翻译需要手动触发重建。[search]短代码别名是个隐患。描述索引会显著增加索引大小,因此在启用之前应该仔细考虑。但这些都不是致命缺陷。
如果您运营着一家 WooCommerce 商店,并且最近没有审核过搜索功能,不妨试试它的分析面板。安装 FiboSearch Pro,启用分析功能,然后放置一周。之后再来看看那些没有结果的搜索结果。我保证您会发现一些有趣的东西。
对于我推荐的任何 WooCommerce 商店,我都会毫不犹豫地推荐这款插件。这是那种只需升级一次,就无需再犹豫的升级。

