てるてるブログ

てるてるぼうずの日常やらお勉強やら

WordPressプラグイン – Amazon Reloaded for WordPress

Posted on | 12月 15, 2011 | No Comments

Amazonさんの商品情報を取得してくれるWordpress用プラグインAmazon Reloaded

インストールすると投稿画面にAmazonの商品検索フォームが表示され、検索した商品の画像と商品名・リンクが投稿フォームに挿入されるといった至ってシンプルなプラグイン。
生成されるリンクもプラグインの独自タグとかではないので、プラグインを外したりWordpressから別のサービスなんかに移行しても使用可能なのが個人的には嬉しい。

導入時にAmazonのAPIキーが必要だったりするのがちょっと面倒。
そこを乗り越えたら楽なんですけどね。

キーの取得に関しては下記サイトさんなどに詳しく載ってるのでそちらを参考に。

導入してみてシンプル故にもうちょっと…って感じだったのをちょい改造したのをメモ。

  • デフォルトだと商品のリンク先が同一ウィンドウで開いてしまうので、これを別ウィンドウで開くように改造
  • 商品情報に作者(DVDとかなら出演者とか)を追加


プラグインの編集は、プラグイン編集画面から「Amazon Reloaded for WordPress」を選択するか、
wp-content/plugins/amazon-reloaded-for-wordpress
上記フォルダにある該当ファイルを編集します。

  • まずはリンク先を別ウィンドウにする方法。

参考サイト
「Amazon Reloaded for WordPress」の商品リンクにtarget=”_blank”を追加して別ウィンドウで開くようにする方法

amazon-reloaded.jsを編集します。
この方法だと行数が分からないのが難点ですが…
スクリプトの最後付近にある二カ所を修正。

send_to_editor('<a href="' + $link.attr('href') + '">' + $link.text() + '</a>');
imageHtml = '<a href="' + jQuery(this).attr('href') + '">' + imageHtml + '</a>';

上がテキストの商品リンクを投稿フォームに送る指示で、下のが画像にリンクを付ける場合の指示。
見たら何となく分かるでしょうが、これを

send_to_editor('<a href="' + $link.attr('href') + '" target="_blank">' + $link.text() + '</a>');
imageHtml = '<a href="' + jQuery(this).attr('href') + '" target="_blank">' + imageHtml + '</a>';

と変更。
これで別窓表示への変更されます。

次に商品情報に著者名or出演者名を追加する方法。

参考サイト
Amazon Reloaded Plugin改造

下記の3ファイル修正。

  1. amazon-reloaded-for-wordpress.php
  2. amazon-reloaded.js
  3. meta-box.php

まずamazon-reloaded-for-wordpress.php内から

$imageUrls = array();
 $images = $item->getElementsByTagName('URL');
 for ($imageNumber = 0; $imageNumber < $images->length; $imageNumber++) {
  $imageUrls[] = $images->item($imageNumber)->nodeValue;
}

を探します。
この直後に

//著作者&出演者追加
 $authorNames = array();
 $authors = $item->getElementsByTagName('Author');
 for ($authorNumber = 0; $authorNumber < $authors->length; $authorNumber++) {
 $authorNames[] = $authors->item($authorNumber)->nodeValue;
 }

 $actorNames = array();
 $actors = $item->getElementsByTagName('Actor');
 for ($actorNumber = 0; $actorNumber < $actors->length; $actorNumber++) {
 $actorNames[] = $actors->item($actorNumber)->nodeValue;
 }

を追記。
その直後にある

$item = array('asin'=>$asin, 'name'=>$name, 'detailPageURL'=>$detailPageUrl, 'imageURLs'=>$imageUrls);

 $item = array('asin'=>$asin, 'name'=>$name, 'detailPageURL'=>$detailPageUrl, 'imageURLs'=>$imageUrls, 'authors' => $authorNames, 'actors' => $actorNames);

に変更。

amazon-reloaded.js内の

function createNewResultRow() {
 var $newRow = jQuery('#arfw-result-template').clone().attr('id','arfw-result-' + this['asin']).addClass('arfw-result');
 $newRow.html($newRow.html().replace(/%ASIN%/g,this['asin']).replace(/%NAME%/g,this['name']).replace(/%DETAIL_PAGE_URL%/g,this['detailPageURL']).replace(/%IMG_SRC%/g,this['imageURLs'][0]).replace(/%IMG_SRC_MED%/g,this['imageURLs'][1]).replace(/%IMG_SRC_LRG%/g,this['imageURLs'][2]));

を探し、この直後に

// 著作者&出演者追加
if (this['authors']) {$newRow.html($newRow.html().replace(/%AUTHOR%/g,this['authors'].join(', ')));}
 if (this['actors']) {$newRow.html($newRow.html().replace(/%ACTOR%/g,this['actors'].join(', ')));}

を挿入。
また別ウィンドウ表示で変更したのとかぶりますが

function addLinkToEditor(event) {
 event.preventDefault();
 var $link = jQuery(this).siblings('.arfw-product-link');
 send_to_editor('<a href="' + $link.attr('href') + '" target="_blank">' + $link.text() + '</a>');
}

ここをまるっと

function addLinkToEditor(event) {
 event.preventDefault();
 var $link = jQuery(this).siblings('.arfw-product-link');
 var $writer = jQuery(this).siblings('.arfw-all');
 send_to_editor('<a href="' + $link.attr('href') + '" target="_blank">' + $link.text() + '</a><br />' + $writer.text());
}

に変更。

最後にmeta-box.php内から

<a target="_blank" class="arfw-product-link" href="%DETAIL_PAGE_URL%">%NAME%</a> 
<a href="%DETAIL_PAGE_URL%" class="arfw-product-insert-link button"><?php _e( 'Send Link to Editor' ); ?></a>

を探し

<a target="_blank" class="arfw-product-link" href="%DETAIL_PAGE_URL%">%NAME%</a><br />
<a href="#" class="arfw-all">%AUTHOR%%ACTOR%</a><br />
<a href="%DETAIL_PAGE_URL%" class="arfw-product-insert-link button"><?php _e( 'Send Link to Editor' ); ?></a>

と変更。

著者名と出演者名の表示がaタグで括ってるのは、そうじゃないと上手く投稿フォームに投げ込めなかっただけという理由です。
検索結果表示ではリンク扱いになってますが、投稿フォームに送るとテキストだけになってるはずです。

spanやpじゃダメだったんだよなぁ。
ここら辺、にわかのコピペコーダーには上手く対処出来ませんでした。
参考サイトさんみたいに一式aタグ内に入れてしまう方がいいのかもしれませんね。
そうするとamazon-reloaded.jsの二カ所目の修正はいらなくなるし…

トラックバックURL:

Comments

Leave a Reply





*

About

てるぼうず

てるてるぼうずな日常やらお勉強やら

旧ブログ倉庫 »
旧ブログの記事をお探しの方はこちらから

Admin