Skin Select:

【WordPress】テーマに「Google AJAX Search API」を貼り付けてみる

 昨日はほぼ1日中、WordPressとにらめっこしておりました。

 自分のブログに「Google AJAX Search API」を導入してみたいと思い立ち、テーマファイルをちょこちょこといじっていたのでした。

 はじめ、WordPressプラグイン「Google Ajax Search」を導入しようかと思い、実際導入してみたのですが、自分のやりたいことを実現できないので即撤去してしまいました。

 そう。自分がやりたかったのは、とりあえずは次の2つです。

  • 検索結果画面に、検索キーワードに関連するWebサイトの情報を表示させる。
  • 投稿の単体表示画面に、記事の「タグ」に関連するWebサイトの情報を表示させる。

 まずは前者、検索結果画面に追加するコードから。
 お使いのテーマに含まれる、検索結果表示用のモジュール(テーマにもよるけど「search.php」という名前になっていることが多いだろう)の、Google検索の結果を表示させたいところに、次のようなコードを埋め込んであげればよいでしょう。

JavaScript:
  1. <!-- Google <abbr title="Asynchronous JavaScript and <abbr title="eXtensible Mark-up Language">XML">AJAX Search API -->
  2. <div id="webSearch">Loading...</div>
  3. <script src="http://www.google.com/uds/api?file=uds.js&amp;v=1.0&amp;key=ABQIAAAAXTvzW8EEIrSVZ__2qTBdmRQZBCryXXxktWmnRJoljTey2MGq8RSmAnoN8R7RLf9oPu0-huUOEdrTfA" type="text/javascript"></script>
  4. <script type="text/javascript">
  5. //<![CDATA[
  6.  
  7. var webSearch;
  8.  
  9. function gasLoad() {
  10.     // Create a search control
  11.     var searchControl = new GSearchControl();
  12.     var gsearch = new GSearch();
  13.     searchControl.setResultSetSize(GSearch.LARGE_RESULTSET);
  14.  
  15.     // Add in a full set of searchers
  16.     webSearch = new google.search.WebSearch();
  17.     searchControl.addSearcher(webSearch);
  18.  
  19.     // Tell the searcher to draw itself and tell it where to attach
  20.     webSearch.setSearchCompleteCallback(null, onWebSearch);
  21.  
  22.     // Execute an inital search
  23.     webSearch.execute("<?php echo wp_specialchars(stripslashes($_GET['s']), true); ?>");
  24. }
  25. function onWebSearch() {
  26.     // Edit Results
  27.     var result = "<h3>&quot;<?php echo wp_specialchars(stripslashes($_GET['s']), true); ?>&quot; に関連するWeb上の記事</h3>";
  28.     result += "<ul>";
  29.     for (var i in webSearch.results) {
  30.         if (webSearch.results[i] == null || webSearch.results[i].title == undefined) {
  31.             continue;
  32.         }
  33.         result += "<li>";
  34.         result += '<a href="' + webSearch.results[i].unescapedUrl + '">';
  35.         result += webSearch.results[i].title;
  36.         result += "</a>";
  37.         result += "</li>";
  38.     }
  39.     result += "</ul>";
  40.     document.getElementById("webSearch").innerHTML = result;
  41. }
  42. gasLoad();
  43.  
  44. //]]>
  45. </script>
  46. <!-- Google AJAX Search API -->

 次いで後者、投稿単体表示画面に追加するコード。
 こちらについては、検索結果が自動的に表示されるのではなく、PHPとJavaScriptにより生成されるタグの一覧をマウスでクリックすることにより、タグの語句に関係するWebサイトを検索するというものです。
 お使いのテーマに含まれる、記事単体表示画面のモジュール(テーマにもよるけど「single.php」という名前になっていることが多いだろう)の、タグ一覧を表示させたい場所に、下記のコードを埋め込みましょう。長くて済みません。

JavaScript:
  1. <!-- Google <abbr title="Asynchronous JavaScript and <abbr title="eXtensible Mark-up Language">XML">AJAX Search API -->
  2. <script type="text/javascript">
  3. //<![CDATA[
  4. <?php
  5. $theTags = get_the_tags();
  6. $tagStr = '';
  7. $first = TRUE;
  8. foreach ($theTags as $theTag) {
  9.     if (!$first) {
  10.         $tagStr .= ',';
  11.     }
  12.     $tagStr .= '"'. $theTag->name. '"';
  13.     $first = FALSE;
  14. }
  15. ?>
  16. var tags = new Array(<?php echo $tagStr; ?>);
  17. var list = '<div>Google <abbr title="Asynchronous JavaScript and XML">AJAX</abbr> Search: ';
  18. list += '<a href="#" onclick="clearList(); return false;">[-]</a> ';
  19. for (var i = 0; i <tags.length; i++) {
  20.     if (i> 0 ) {
  21.         list += ', ';
  22.     }
  23.     list += '<a href="#" onclick="gasLoad(' + "'" + tags[i] + "'" + '); return false;">' + tags[i] + '</a>';
  24. }
  25. list += '</div>';
  26. document.write(list);
  27. function clearList() {
  28.     document.getElementById("webSearch").innerHTML = '';
  29. }
  30. //]]>
  31. </script>
  32. <script src="http://www.google.com/uds/api?file=uds.js&amp;v=1.0&amp;key=ABQIAAAAXTvzW8EEIrSVZ__2qTBdmRQZBCryXXxktWmnRJoljTey2MGq8RSmAnoN8R7RLf9oPu0-huUOEdrTfA" type="text/javascript"></script>
  33. <script type="text/javascript">
  34. //<![CDATA[
  35.  
  36. var webSearch;
  37.  
  38. function gasLoad(q) {
  39.  
  40.     // Loading...
  41.     document.getElementById("webSearch").innerHTML = 'Loading...';
  42.  
  43.     // Create a search control
  44.     var searchControl = new GSearchControl();
  45.     var gsearch = new GSearch();
  46.     searchControl.setResultSetSize(GSearch.LARGE_RESULTSET);
  47.  
  48.     // Add in a full set of searchers
  49.     webSearch = new google.search.WebSearch();
  50.     searchControl.addSearcher(webSearch);
  51.  
  52.     // Tell the searcher to draw itself and tell it where to attach
  53.     webSearch.setSearchCompleteCallback(null, onWebSearch);
  54.  
  55.     // Execute an inital search
  56.     webSearch.execute(q);
  57. }
  58. function onWebSearch() {
  59.     // Edit Results
  60.     var result = "";
  61.     result += "<ul>";
  62.     for (var i in webSearch.results) {
  63.         if (webSearch.results[i] == null || webSearch.results[i].title == undefined) {
  64.             continue;
  65.         }
  66.         result += "<li>";
  67.         result += '<a href="' + webSearch.results[i].unescapedUrl + '">';
  68.         result += webSearch.results[i].title;
  69.         result += "</a>";
  70.         result += "</li>";
  71.     }
  72.     result += "";
  73.     document.getElementById("webSearch").innerHTML = result;
  74. }
  75.  
  76. //]]>
  77. </script>
  78. <div id="webSearch"></div>
  79. <!-- Google AJAX Search API -->

 いずれも、「key=」という記述の後ろにある86文字のコードについては、Webサイトごとに割り振られる「AJAX Search API Key」を指定します。下記の例では当ブログのAPI Keyとなっておりますので、適宜置き換えてください。

 それから、これらのコードはあくまで当ブログで使っているものをそのまま貼り付けただけです。特に後者については、ブログのテーマによっては表示デザインにおいて違和感を禁じ得ないと思われますので、テーマに合うように適宜書き換えてください。

 また、これらのコードはあまり見やすいとは言えません。とりあえず大急ぎで思いつくままに書いたのでこんなごちゃごちゃしたものとなっていますが、なにとぞご容赦願います。
 あ、これをWordPressのプラグインにしてくださる方がいらっしゃれば、是非とも名乗りを上げてください(←そう言う前にお前がやれ)。 

 最後に、おきまりではありますが、これらのコードをお使いになったことにより何らかの問題が生じたとしても、当方は一切の責を負わないものとさせていただきます。ご了承ください。

 なお、今回当ブログに「Google AJAX Search API」を導入するに当たり、下記のサイトの情報を参考にさせていただきました。ありがとうございます。

関連サイト
Google AJAX Search APIGoogle Code
Google AJAX Search API の使い方The Star of Web2.0

WordPress 2.2でつくる!最強のブログサイト―2.1/2.2対応 基礎 Ajax + JavaScript Java開発者のための Ajax実践開発入門

コメントを書く

メールアドレスが公開されたり他で使われたりすることはありません* 印の項目は必須項目です。
*
*

関連記事