在 WordPress 中整合 Google 自定义搜索引擎
虽然 WordPress 自带有一个站内搜索引擎,但是性能比较低下,而且还会占用服务器资源。所以还不如利用 Google 提供的自定义搜索引擎,将其集成到我们的博客中来。
第一步:注册 Google 自定义搜索引擎
首先,我们需要到Google上面去注册一个自己的搜索引擎。访问http://www.google.com/cse/,用你的 Google 账户登录之后,创建新的搜索引擎。创建完毕后进入”外观”面板,这里选择”全宽”布局。保存后进入”获取代码”,获得如下代码:
<?php /* Template Name: search */ ?> <?php get_header(); ?> <div id="cse" style="width: 100%;">Loading</div> <script src="http://www.google.com/jsapi" type="text/javascript"></script> <script type="text/javascript"> google.load(‘search’, ’1′, {language : ‘zh-CN’}); google.setOnLoadCallback(function() { var customSearchControl = new google.search.CustomSearchControl(’005173058427090287855:djmrkortfdw’); customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET); var options = new google.search.DrawOptions(); options.setAutoComplete(true); customSearchControl.draw(‘cse’, options); }, true); </script> <link rel="stylesheet" href="http://www.google.com/cse/style/look/default.css" type="text/css" /> <?php get_footer(); ?>
第二步:创建搜索结果页
为了让搜索结果在博客内显示,我们需要在 WordPress 中创建一个新的页面,作为搜索结果展示的页面。我们创建一个叫做search.php(文件名无所谓)的模板文件,可视乎你的模板调整,内容如下:
<?php /* Template Name: search */ ?> <?php get_header(); ?> <div id="cse" style="width: 100%;">Loading</div> <script src="http://www.google.com/jsapi" type="text/javascript"></script> <script type="text/javascript"> google.load(‘search’, ’1′, {language : ‘zh-CN’}); google.setOnLoadCallback(function() { var customSearchControl = new google.search.CustomSearchControl(’005173058427090287855:djmrkortfdw’); customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET); var options = new google.search.DrawOptions(); options.setAutoComplete(true); customSearchControl.draw(‘cse’, options); }, true); </script> <link rel="stylesheet" href="http://www.google.com/cse/style/look/default.css" type="text/css" /> <?php get_footer(); ?>
接着在后台新建页面,别名设置为 search ,在右侧选择模板 search ,提交保存。
第三步:修改站内搜索提交表单
接下来我们要做的事情,就是当用户点击你网站上任意页面的站内搜索按钮的时候,将用户引导到你刚刚创建的搜索结果页上。在主题文件夹中找到相应的模板页,在模板页中找到站内搜索相关的代码:
<form method="get" action="/search"> <input type="text" size="24" name="q" value="搜索文章…." class="textfield" style="float:left" onblur="if (this.value == ”) {this.value = ‘搜索文章….’;}" onfocus="if (this.value != ”) {this.value = ”;}"/> <input class="submitSearch" type="submit" value="Search"></input> </form>
这里主要修改 method=”get” action=”/search”,还有文本框 name=”q”
第四步:初始化搜索关键字
现在我们要做的事情就是,先从Url中提取用户搜索的关键词,然后调用 Google API 使用此关键词进行搜索。
打开刚才新建的search.php,在 Google 的代码 customSearchControl.draw(‘cse’, options); 后插入以下代码:
var match = location.search.match(/q=([^&]*)(&|$)/); if(match && match[1]){ var search = decodeURIComponent(match[1]); customSearchControl.execute(search); }
在上面的代码中,先使用正则表达式提取出来 URL 中的关键词,并使用 UTF-8 解码,然后让 Google 执行搜索。实际使用中,你需要确认你网站上使用的 URL 搜索参数是不是 q ,如果不是,那么需要将上述的正则表达式中的q改成你自己定义的参数。