WordPress搜索关键字高亮实现

之前搜索到javaeye的文章页面,关键字高亮的功能很受用。Wordpress的博客中如果添加一个搜索引擎来源关键字高亮的功能,无疑能让博客增色不少;另一方面,可以给关键字添加链接,利用好Wordpress自身的搜索功能,这样可以减小跳出率。

关键字高亮效果

实现分析

个人认为,使用php来实现高亮的做法不可取。不管是基于正则表达式的替换,还是使用字符串的变更,对服务器资源都占用很大。并且,如果访客欢迎这项功能,那么带来的负担也是相当的沉重。

另外,对于一些带有缓存插件如WP-Super-Cache的博客,纯php显然基本无法实现。

那么,使用javascript由客户端进行处理则是一个不错的选择。但有一个问题需要关注:不同的搜索引擎使用的编码不同,如Google使用utf-8编码,而百度则使用gb2312,这样使得javascript处理起来有一定的难度。

最终,将php与javascript结合起来的方案或许是一个很好的搭配。

实现过程

1. Google一段javascript关键字高亮代码

建议搜索到的代码应当有如下特征:

  • 支持多关键字
  • 尽量不要大规模重新处理DOM模型
  • 尽量基于jQuery

当然,熟悉之后可以自己写相关代码,也很简单。在这儿推荐一段还可以的代码:http://www.zhangxinxu.com/wordpress/?p=888

2. 使用php调用javascript代码

我们可以做一个获取搜索关键字的php函数,结构很简单,如下:

function seach_words (){
$search_engine = array (‘google.com’=>’q',’baidu.com’=>’wd’,'bing.com’=>’q',’yahoo.com’=>’p',’sogou.com’=>’query’,'soso.com’=>’w');
if(is_search()&&$_GET['s']!=”)
return $_GET['s'];
else {
foreach($search_engine as $key=>$value)
if(strpos($_SERVER['HTTP_REFERER'],$key)&&$_GET[$value]!=”)
return str_replace(‘+’,’ ‘,$_GET[$value]!=”);
return false;
}
}

并在footer或者header中调用


jQuery(“.entry”).textSearch(““,{markClass:”keywords”});

通过以上两步,已经实现了关键字的高亮。无论是来路是搜索引擎,还是来路是Wordpress的资深搜索,均能将关键字高亮

3. 给这些高亮的关键字添加Wordpress搜索链接

为了减小跳出率,之前我们考虑到要将搜索引擎的来路关键字再组织,可以利用自身的搜索形成二次访问。

jQuery(“span[rel='mark']“).click(
function() {
window.location=”/?s=“;
}
);

在这里jQuery就派上用场了,也正是之前建议javascript关键字高亮代码尽量基于jQuery的原因。例如,使用这段代码给关键字的<span>块添加click事件,跳转到相关关键词的搜索。

4. 搜索结果的缓存

显然的,如果访客一直执行相关搜索,即便php不过滤关键字,mysql查询对于站点服务器的负载还是很重。那么,这儿我们考虑使用缓存插件。

例如,WP-Super-Cache插件可以很好的处理这个问题。一般来讲站点的来路关键字不会特别广泛,缓存确实可以实现比较好的效果。

总结

相对于WP MarkKeyword这类的插件,我们采用的这种方式最大限度的减小了服务器的压力。尽管有一定的不足之处(例如,Wordpress自身的搜索结果关键字可能不在excerpt之内),但总体上是一个完美的解决方案。

通过javascript来高亮,能够避免搜索引擎抓取到一些奇异的结果,保持我们对搜索结果的控制。

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Permalink: http://zyj.me/article/wordpress-search-words-highlight
Tags:
»

Comments are closed.

我的微博