0%

在WordPress上使用谷歌的Google自定义搜索

WordPress自带的搜索功能其实比Google自定义搜索更加智能,尤其是文章内链比较多的博客。但是使用Google自定义搜索可以减少WordPress数据库的查询,对于共享主机来说好处也是明显的。当然,Google自定义搜索的内容也受制于Google对WordPress的收录情况。

第一步:整合 Google 自定义搜索之前肯定必须要先让 Google 为你服务,通过访问 http://www.google.com/cse/ 创建你的搜索引擎。创建完毕后进入“外观”面板,选择“全宽”的布局模式。保存后进入“获取代码”,获得你的 Google 自定义搜索代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- Put the following javascript before the closing </head> tag. -->
<script>
(function() {
var cx = '015818537936328944739:nkbsvpppu5k';
var gcse = document.createElement('script'); gcse.type = 'text/javascript'; gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
'//www.google.com/cse/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(gcse, s);
})();
</script>

<!-- Place this tag where you want both of the search box and the search results to render -->
<gcse:search></gcse:search>

第二步:创建Google自定义搜索结果页面

为了让搜索结果在博客内部显示,我们需要在 WordPress 中创建一个新的页面,用来显示搜索的搜索结果。我们新建一个文件,命名为 search.php,文件内容复制下面的即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
/*
Template Name: search
*/
?>
<?php get_header(); ?>
<div id="cse" style="width: 100%;">Loading</div>
<script src="http://www.google.com.hk/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('你的Google自定义搜索ID');
customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
customSearchControl.draw('cse');
});
</script>
<link rel="stylesheet" href="http://www.google.com.hk/cse/style/look/shiny.css" type="text/css" />
<?php get_footer(); ?>

其中将“你的 Google 自定义搜索 ID”替换为 Google 给你的“搜索引擎的唯一 ID”,可以在控制面板的基本信息内获取。保存后将 search.php 上传至你的主题根目录下。

最后在你博客的后台 – 页面中新建页面,在页面属性的模版中找到 search 并选择,写好标题发布即可。

第三步:用Google自定义搜索替换Wordpress自带搜索

找到主题中的searchform.php,其中有如下代码:

1
2
3
4
5
<form method=”get” action=”<?php echo $_SERVER['PHP_SELF']; ?>”>
<div>
<input type=”text” value=”Search term…” name=”s” onblur=”if(this.value==”)this.value=’Search term…’;” onfocus=”if(this.value==’Search term…’)this.value=”;” />
</div>
</form>

1
action="<?php echo $_SERVER['PHP_SELF']; ?>

修改为:

1
action="/search"

这里的“search”对应的就是前面的search页面。action 的地址可以根据你自己在后台新建页面的固定链接的方式来修改,只要保证能访问到我们刚新建的页面就行
因为国内用户一般是中文搜索,所以还需要更改;不管你原先主题搜索框的 name 等于什么,都将引号内的字母改成 q

1
name="s"

1
name="q"

第四步:初始化搜索关键字

这是无缝整合 Google 自定义搜索框的最后一步,完成他你就大功告成了哦。这一步我们要做的是:从 URL 中提取浏览者搜索的关键词,然后调用 Google API 进行搜索。听起来很复杂?无需理解,简单的跟着做就可以了:

打开我们刚才新建的 search.php,在 Google 的代码 customSearchControl.draw(‘cse’, options); 后插入以下代码:

1
2
3
4
5
var match = location.search.match(/q=([^&]*)(&|$)/);
if(match && match[1]){
var search = decodeURIComponent(match[1]);
customSearchControl.execute(search);
}

这段代码就是自动获取主题搜索框的搜索字串。大功告成啦,从此以后你依旧可以使用主题原始的搜索框而享受 Google 自定义搜索带来的好处。