美化iNove的Google自定义搜索

2009/09/01 Add 108 comments |

iNove主题在后台的“主题选项”中设置了一个定制Google自定义搜索的功能,以优化WordPress的搜索结果。我一直没有启用这个功能,直到看到A-shun同学折腾后的搜索页面,恍然大悟,原来我也是想要搜索结果在当前主题内展示,而不是跳转到Google的页面。我也做出了一些改变,把搜索结果页面整合到了主题中,具体的效果,可以到NeoEaseLet's whisper随便搜索些东西来比较一下。 [比较这里吧: | ]

其中参考了我爱水煮鱼的教程,如果你不是用iNove,可以直接看那篇教程。以下我就针对iNove,开始:

1、登陆到Google自定义搜索,创建你的自定义搜索。(此处略去x百字)

2、创建一个搜索结果模板。把下面代码保存为cse.php,上传至iNove主题的文件夹。(cse意为custom search engine,你可以换成其他)

<?php
/*
Template Name: cse
*/
?>

<?php get_header(); ?>
<div id="cse-search-results"></div>
<script type="text/javascript">
  var googleSearchIframeName = "cse-search-results";
  var googleSearchFormName = "cse-search-box";
  var googleSearchFrameWidth =600;
  var googleSearchDomain = "www.google.com";
  var googleSearchPath = "/cse";
</script>
<script type="text/javascript" src="http://www.google.com/afsonline/show_afs_search.js"></script>
<?php get_footer(); ?>

var googleSearchFrameWidth =605为搜索结果页面的宽度,iNove默认的宽度是605。

3、在WordPress中创建一个页面,比如我的,地址为http://www.whisperer.name/cse,标题为Search Result,模板选择刚刚创建的cse。

然后在导航栏隐藏这个页面,在iNove的文件夹找到templates/header.php,找到下面一行:

wp_list_pages('title_li=0&sort_column=menu_order');

改成,

wp_list_pages('title_li=0&sort_column=menu_order&exclude=41');

其中exclude=41意思是在导航栏隐藏这个cse页面,41是这个页面的ID,在/wp-admin/edit-pages.php页面,鼠标悬浮在页面的标题上,在下面状态栏就可以看到post=41

4、定义搜索框。仍然是templates/header.php,找到下面代码:

<form action="http://www.google.com/cse" method="get">
    <div class="content">
        <input type="text" class="textfield" name="q" size="24" />
        <input type="submit" class="button" name="sa" value="" />
        <input type="hidden" name="cx" value="<?php echo $options['google_cse_cx']; ?>" />
        <input type="hidden" name="ie" value="UTF-8" />
    </div>
</form>

改成,

<form action="<?php bloginfo('wpurl') ?>/cse" id="cse-search-box">
  <div class="content">
    <input type="hidden" name="cx" value="<?php echo $options['google_cse_cx']; ?>" />
    <input type="hidden" name="cof" value="FORID:11" />
    <input type="hidden" name="ie" value="UTF-8" />
    <input type="text" class="textfield" id="searchtxt" name="q" size="24" />
    <input type="submit" class="button" id="searchbtn" name="sa" value="" />
  </div>
</form>

其中第一行的< ?php bloginfo('wpurl') ?>/cse是刚刚你创建的搜索结果页面的地址。

5、在iNove的主题选项中,勾选使用Google自定义引擎,填上你的CX值。

这样,所有的工作都做完了。你可以随时在WordPress默认搜索和Google自定义搜索之间进行切换。并且不需要再另外用css定义搜索框了,已经沿用原来的搜索框样式了。

PS:这个是可以在后台切换两种搜索模式,应该可以在搜索框旁边定义一个按钮,让访客可以自行选择。刚入WP的时候在某个博客上看到过,谁知道怎么定义的话不妨共享出来。

2009/09/24  update: 在IE6下出现错位的同学,请更新一下第4步中的代码,感谢bigyang


署名-非商业性使用-相同方式共享
  1. 光影 #comment-1393
    2009/10/02 17:00  #51

    @whisperer
    都不想搞的,但是你们都在搞,欺负人啊 :cry:

  2. whisperer #comment-1399
    2009/10/02 22:21  #52

    @光影
    应该有的 没有头像天理不容啊 :mrgreen:

  3. cyclone77 #comment-1461
    2009/10/05 16:42  #53

    您牛改的主题可以发到我的邮箱里吗?我超喜欢
    maxlongint@gmail.com

  4. whisperer #comment-1473
    2009/10/05 22:38  #54

    @cyclone77
    我用了很多插件 别人不适用 :sad:

  5. John #comment-1666
    2009/10/10 15:56  #55

    今天又回到这个文章。原来在本地设置没有问题的。今天搬到新的服务器,更新后却搜不到东西了。不知道问题出在哪里?博主可否指教一二?

  6. whisperer #comment-1669
    2009/10/10 22:54  #56

    @John
    你在Google中直接用你的自定义搜索是正常的么?

    我刚到你那看了下,发现你没开启自定义搜索,所以也无法判断产生错误的原因。

  7. mosky #comment-1672
    2009/10/11 05:14  #57

    成功啦,谢谢

  8. 虎皮鲨 #comment-1938
    2009/10/17 12:06  #58

    代码里面有真对的IE的,能添加针对其它浏览器的么?

  9. 虎皮鲨 #comment-1939
    2009/10/17 12:07  #59

    代码怎么显示不了?

    如何添加针对FF等其他浏览器的啊?

  10. whisperer #comment-1941
    2009/10/17 12:21  #60

    @虎皮鲨

    本来就是所有浏览器可以用啊。
    你是什么意思?

  11. 歪歪屋啊 #comment-1945
    2009/10/17 13:35  #61

    已经OK了哈哈,谢谢提供

  12. bolo #comment-2103
    2009/10/26 14:39  #62

    不错的教程

  13. leez #comment-2235
    2009/11/06 18:17  #63

    我的怎么是从新窗口打开?google托管的方式。

  14. 臻臻 #comment-2277
    2009/11/19 10:51  #64

    非常感谢分享。

  15. 北街 #comment-2488
    2010/01/02 10:50  #65

    支持一下! :arrow:

  16. lm #comment-2508
    2010/01/08 02:59  #66

    又学到了

  17. #comment-2598
    2010/01/28 17:29  #67

    @whisperer
    我的也是这个情况,搜索完后地址没有指到设置的那个页面,是不是还有哪儿需要修改?您说的这个方式/?page_id=9好像不可以哦

  18. Huey #comment-2666
    2010/03/19 15:39  #68

    不错哈~ 已用上!

  19. lealost #comment-2719
    2010/04/16 20:32  #69

    站长!你的那个滑动的导航栏是如何编写的挺好看的...能否分享下...

  20. 随缘 #comment-2790
    2010/05/24 16:56  #70

    已使用,谢谢分享 :o

  21. nero #comment-2808
    2010/06/02 10:53  #71

    请教:按照您的方法修改之后,搜索功能实现了,不过头顶上出现警告
    Warning: Cannot modify header information - headers already sent by (output started at /home/nero/public_html/wp-content/themes/inove/cse.php:7) in /home/nero/public_html/wp-includes/pluggable.php on line 868
    能告诉我应该怎么做吗?

  22. ③秋之流☆ #comment-2814
    2010/06/04 20:05  #72

    用上了..而且..打算转载...
    有个问题:在"搜索 的第 1 - 10 条搜索结果(启用了安全搜索功能)..."下面的分割线的颜色在哪控制的?我找不到..现在还是蓝色的...
    还有..你这里的搜索结果..得到的..更多为手机版的地址(如我搜"搜索"就找不到这里的网址)..我想把这个去掉会更好..

  23. 非主流 #comment-2818
    2010/06/05 23:29  #73

    这个不错,我拿去用啦,效果很好!!

  24. changli #comment-2846
    2010/07/07 17:01  #74

    哇塞 前所未有啊 !!!博主的博客这么漂亮 有空多些点教程让我们这些小菜多学学哦。。。

  25. 淘流行部落 #comment-2889
    2010/07/22 17:53  #75

    博主的主题很干脆简约,个人觉得很不棒,呵呵,尤其喜欢导航的那种效果。。 :smile:

  26. Innocence #comment-2968
    2010/08/17 19:05  #76

    为什么修改了以后,主页显示只有背景了

  27. Innocence #comment-2969
    2010/08/17 21:41  #77

    为什么按照你的方法设置了,搜索还是到Google页面呢
    /cse应该换成什么呢
    是整个/cse换成我设置的页面地址,还是
    cse换成那个地址
    我都试了,结果都是到Google页面

    我用的是inove1.4.6

    请问一下你的评论怎么支持html的

  28. Innocence #comment-2970
    2010/08/18 00:35  #78

    不好意思,又修改了以后,点搜索显示的都是主页内容
    而网址是
    http://crying-angel.tk/?cx=008729999963926825505%3A7syqbup1w-w&cof=FORID%3A11&ie=UTF-8&q=GO&sa=
    不管我搜有的内容还是没有的内容都是一样 :roll:

  29. Vaughan #comment-3016
    2010/10/06 14:00  #79

    多谢!用了,可以的。

  30. T先生 #comment-3036
    2010/11/07 12:26  #80

    Innocence :
    不好意思,又修改了以后,点搜索显示的都是主页内容
    而网址是
    http://crying-angel.tk/?cx=008729999963926825505%3A7syqbup1w-w&cof=FORID%3A11&ie=UTF-8&q=GO&sa=
    不管我搜有的内容还是没有的内容都是一样

    我也是这样,显示主页内容

  31. T先生 #comment-3038
    2010/11/07 13:44  #81

    @T先生
    /?page_id=9这种链接不行,换了链接就正常了

  32. alige #comment-3157
    2011/03/25 19:57  #82

    事实上 不需要这么麻烦 修改一些templets/header 和serch即可达到同样的效果。

  33. whisperer #comment-3158
    2011/03/25 21:53  #83

    @alige
    愿闻其详~~ :grin:

  34. alige #comment-3159
    2011/03/25 23:38  #84

    @whisperer
    呵呵 是我的错 原来是你搞美化哈 不过 只能在后台切换 感觉意义不大 与其这样切换 那跟直接在search.php中注视掉一段代码没什么两样 如果只是单纯的整合Google自定义搜索,直接在search中加入Google自定义搜索代码即可。在代码后面加上var match = location.search.match(/s=([^&]*)(&|$)/);//正则传参
    if(match && match[1]){
    var search = decodeURIComponent(match[1]);
    customSearchControl.execute(search);
    }
    });

  35. whisperer #comment-3160
    2011/03/26 11:34  #85

    @alige
    受教了。。的确是个简单方法~

  36. G字头老大 #comment-7016
    2011/08/08 07:19  #86

    适用于所有主题吗?

  37. 上堡梯田 #comment-12203
    2011/09/15 09:23  #87

    学习了,就是图片不太清晰

1 2 42
  1. 2009/09/19 14:55 | #1
  2. 2009/09/21 20:46 | #2
  3. 2009/09/24 14:10 | #3
  4. 2009/10/02 13:04 | #4
  5. 2009/11/19 21:53 | #5
  6. 2009/12/14 01:56 | #6
  7. 2010/06/06 03:13 | #7
  8. 2010/09/18 14:28 | #8
  9. 2010/09/18 14:53 | #9
  10. 2011/04/17 20:17 | #10
  11. 2011/04/20 13:29 | #11
  12. 2011/08/04 04:06 | #12
  13. 2011/08/19 02:11 | #13
  14. 2011/08/20 01:10 | #14
  15. 2011/09/11 04:22 | #15
  16. 2011/10/09 19:57 | #16
  17. 2011/11/17 01:25 | #17
  18. 2011/11/17 14:15 | #18
  19. 2011/11/19 01:29 | #19
  20. 2011/12/22 22:54 | #20