一直以来 WordPress 都有个问题,它的搜索功能采用了完全匹配的模式,很多时候都无法得到自己想要的结果,做得跟屎一样!举个例子,这里前不久发布了一篇文章说想给博客改名,搜索“博客改名”能精确命中该文,但如果没有安装分词插件增强 WordPress 搜索,搜索“博客改名字”是不会返回任何结果的!这时候咱就不得不主动更改关键词去扩大搜索范围,很影响用户体验。
你可能觉得这功能没啥用?错了…只要稍微留心下网页统计,其实访客用搜索的次数还真不少,但往往没有获得有用的结果(前提是你的网站上有相关内容)。我本人一直想增强 WordPress 的搜索功能,可是之前一直没用对关键词,也就没有找到合适的方案…有一段时间甚至想尝试引入搜索引擎来实现。
现在我终于发现原来有个类目叫:WordPress 分词搜索插件,其主要功能就是把咱键入的关键词拆开了在 WordPress 系统中去检索,然后把结果返回呈现出来。比如上面的例子,用了分词搜索插件后,原关键词可能会被拆成“博客 改名字”或者“博客 改名 字”,然后系统会根据这拆开的几个关键词去分别检索,按照插件后台设置的 And 和 Or 的组合条件最终给访客呈现相关页面。
这个分词的动作由插件自动完成,其分词语言逻辑取决于所接入的 API,有时候也不一定准……即便不准的时候,咱人为手动地在搜索关键词之间打空格也是可以实现分词搜索的(以前不行),挺好用。英文分词搜索软件我用不上,也没做相关测试,本文推荐两个完全免费的 WordPress 中文分词搜索插件,快去增强你的搜索功能吧!
1. Erphp Search 分词搜索/搜索增强插件
Erphp Search 是一款由模板兔开发的分词搜索/搜索增强 WordPress 插件,插件主要功能就是将用户搜索的关键字进行分析后进行拆分,然后进行分词搜索,从而达到搜索结果更智能、更广泛。该插件完全免费,内置了百度、腾讯和结巴 3 个 API 接口,百度腾讯的接口为远程调用需要进一步设置(需付费);结巴中文分词则完全开源,作者也将结巴分词的数据完全集成进了主题文件,免费使用。所以…你即将获得一个超过 100MB 的 WordPress 插件。
Erphp Search 分词搜索插件可选的设置就两个:一是选择 API(其实已经没有选择了);二是对搜索结果组合条件的判定,“AND”需要同时包含所有关键字,“OR”则仅需包含其中某一个关键字,具体就看你的需求了…我选的是 AND。
WordPress 搜索功能本身就是一个体力活,在文章很多的情况下搜索是很耗资源的。如果增加 Erphp Search 分词搜索,特别是采用结巴本地词库,势必会对搜索速度产生一定的影响。作者自述采用结巴接口本地处理分词建议服务器至少 4G 内存,但我实际测试并不需要如此高的性能…且如果搜索不工作的话本身是不消耗性能的,所以请放心安装吧。
2. dahuzi-search-analysis 中文分词搜索插件
该插件同样完全免费,体积小巧(仅二十行代码)没有任何设置项,其中文分词调取了Pullword 分词接口,需要将关键词传输到远端分词后再返回本地搜索,我本人在测试站使用是能正常工作的,不过很遗憾它在我的两个主站(阿里云/宝塔)都无法启用,提示有核心错误。插件原作者对其进行了 php 加密,我也就无法得知其具体的出错原由了~
3. 给 WordPress 增加快捷键直达搜索输入框
Well,我这小博客因为个人喜好的原因,目前俭省了部分功能,甚至把一些常用的按钮都做了隐藏,比如搜索框。最近用搜索的频率越来越多了……所以,我搞了个快捷键。请按下/
,是不是自动弹出搜索框了?怎么实现呢?其实很简单,仅需要将以下代码添加到footer.php
中即可。
<script>
(function($){
$(document).keydown(function(e){
// 检查按下的键是否是 '/' 键(键码 191)
if(e.keyCode === 191){
// 获取事件的目标元素
var target = e.target;
// 检查目标元素是否是输入框、文本区域或具有 contentEditable 属性的元素
var isInputField = target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable;
// 仅当目标元素不是输入框、文本区域或可编辑元素时,才执行操作
if(!isInputField){
// 阻止默认行为
e.preventDefault();
// 模拟点击 .grve-toggle-modal 元素
$('.grve-toggle-modal').click();
// 延时 300 毫秒后聚焦到搜索输入框
setTimeout(function(){
$('#grve-search-modal-textfield-input').focus();
}, 300);
}
}
});
})(jQuery);
</script>
你完全照搬代码是不行的,因为这段 JavaScript 代码必须绑定正确的类,可以参考着修改下。如果实在不懂的话,那就问问 AI 吧,因为我也是问的 ChatGPT……
问:我的网站使用搜索比较复杂,首先要点击按钮,弹出窗口;然后再点击进输入框。
按钮:<a href="#grve-search-modal" class="grve-toggle-modal">
输入框:<input id="grve-search-modal-textfield-input" type="text" class="grve-search-textfield grve-leader-text grve-border" value="" name="s" autocomplete="off">
答:基于您提供的信息,如果您的网站搜索功能涉及点击一个按钮来弹出一个模态框,然后在模态框中输入搜索词,我们需要编写一段 JS 代码来处理这一系列的交互…代码就上边那段。
请将上述代码添加到您的 WordPress 主题的 footer.php
中,或通过在 functions.php
文件中创建一个适当的wp_enqueue_script
操作来添加。这段代码会在按下/
键时触发点击事件,打开模态框,并聚焦到搜索输入框。
由于模态窗口可能需要一些时间来加载和显示,所以我们在这里添加了一个setTimeout
,以确保搜索输入框有足够的时间变得可用。500
毫秒的延迟是一个经验值,您可能需要根据您网站的实际响应时间来调整这个值。您还可以考虑添加一些检查来确认模态框确实已经打开,并且是可见的,之后再聚焦输入框。
看看这个插件