Amazon商品リンクで表示される価格を、Amazon在庫商品を優先するようにカスタマイズする

 昨日書いた記事の通り、AmazonのPA-APIが使えるようになったので、ブログ内の商品リンクをすべて楽天からAmazonへのリンクに貼り直しています。

 その作業中、「あれ?」と思う出来事が。
 Amazonの商品リンクに記載されている商品価格と、そのリンクをクリックして開いたAmazon商品ページに表示される価格が一致しないのです。

Amazon商品リンクは1,700円と表示されているのに…
実際にAmazonに飛んでみると2,200円になってる…

 よーく見てみると、どうも商品リンクに表示される価格はマーケットプレイスに出品されたものも含めたすべての中から、一番安い商品価格を表示するようになっているようです。でも、数字上は確かにそれが一番安い価格なんですけど、だいたい送料が加算されるから、Amazon在庫価格よりも合計金額は高くなるんですよね。

 しかも安いと思ってリンクを踏んだらそれより高いAmazon在庫価格が表示されるというのも、なにか気持ち悪いものが残ります。
 というわけで、最安価格ではなく、Amazon在庫価格を優先して表示するように、コードをいじってみることにしました。

スポンサーリンク

子テーマの範疇では無理、しょうがなく親テーマをいじることに…

 該当する箇所は、親テーマであるcocoon-master配下の lib/shortcodes-amazon.php 内にありました。その409行目から432行目を抜き出したものが次のコード。

$FormattedPrice = esc_html($ListPrice->FormattedPrice);

///////////////////////////////////////////
// OfferSummary尚価格取得
///////////////////////////////////////////
$OfferSummary = $item->OfferSummary;
if ($OfferSummary) {
  $LowestNewPrice = $OfferSummary->LowestNewPrice->FormattedPrice;
  if ($LowestNewPrice) {
    $FormattedPrice = $LowestNewPrice;
  } else {
    $LowestUsedPrice = $OfferSummary->LowestUsedPrice->FormattedPrice;
    if ($LowestUsedPrice) {
      $FormattedPrice = $LowestUsedPrice;
    } else {
      $LowestCollectiblePrice = $OfferSummary->LowestCollectiblePrice->FormattedPrice;
      if ($LowestCollectiblePrice) {
        $FormattedPrice = $LowestCollectiblePrice;
      }
    }

  }
  //_v($OfferSummary);
}

 1行目で$FormattedPriceにセットしている$ListPrice->FormattedPriceは、参考価格つまり定価をあらわします。その後、新品の最低価格をこれに上書き。新品最低価格がない場合は中古の最低価格で上書き…という案配で、この中身が更新されていきます。

 なるほど、この流れであれば確かに新品の最低価格が表示されてしまうのも納得です。

 自分の用途としては、最終的にAmazonの価格になっていればいいので、このコードの後ろに次の1行を足して、強制的にAmazon在庫価格で上書きしてしまいます。美しくないですけど。

$FormattedPrice = esc_html($item->Offers->Offer->OfferListing->Price->FormattedPrice);

 Cocoonはよくできていて「ない場合は表示しない」という動きが徹底されています。だからこんな雑な対処でも、Amazonに在庫がない場合は価格自体を表示しないようにしてそれなりにまとめてくれるはず…多分。

 修正ファイルをテストサーバーにあげてリロードしてみたところ、想定した通りの価格が表示されるようになりました。やった、OKだ。

Amazon在庫価格の2,200円が表示されるようになった

OKだけどOKじゃない

 とりあえず希望通りの価格表示ができることはわかりました。が、それでOKかというと、そんなことはないのが悲しいところ。
 何故かというと親テーマのファイルをいじってしまっているから、このままでは親テーマがアップデートされる度に同じ修正を入れ直していく必要が出ちゃうのです。ちょっとした作業ですけど、なるべくならそういうメンテナンスに悪影響となる要素は残しておきたくありません。

 少し悩みましたが、ダメ元で開発元に要望をあげてみることにしました。
 CocoonのWebサイトには専用のフォーラムが設けてあって、不具合報告やカスタマイズの相談、要望などを受け付けているのです。

 実際に要望を書き込んでみたトピックが以下。「くどいかな…」と思いつつも、手持ちの情報をすべて投げて親テーマに組み込むか否かの判断材料にしてもらうことにしました。

 そうしたら驚いたことに、即日で対応していただけました。それも、僕がやったような強引なものじゃなく、ちゃんと設定画面に項目を設けて、Amazon在庫価格が取得できなかった場合はそれ以外の新品商品価格が設定されるという綺麗な仕様です。

 言って良かったー。というか使用テーマにCocoonを選んで良かった。

「カスタマイズ~…」という記事が最後に「カスタマイズ不要~」ってオチで終わるのはなんだかなって話ですけど、せっかくなので書いてみました。既にリリースされている最新版ではこの仕様が組み込まれているので、設定画面でチェックボックスを1個オンにするだけでAmazon在庫価格が表示されるようになっています。

  1. 匿名 より:

    apiの規約的にスクショはまずいような……

スポンサーリンク