概要
WordPressで、Amazonアソシエイトを使って、商品の紹介をしたいときに、いい感じに商品を見せることができるAmazonJSというプラグインがあります。
しかし、ある時これがうまく機能しなくなりました。なので、その原因と解決方法をここに書いておきます。
原因
まず、AmazonJSで商品が表示されなくなった原因を説明します。
その原因は、HTTPSという安全(セキュア)な通信において、HTTPという安全ではない(ノンセキュア)情報を表示しようとしているからです。
(HTTPSとHTTPが混在したものをMixed Content と言うようです)
ちなみに、一部のブラウザではこのような状態でも、AmazonJSが正しく動作しますが、最近のブラウザでは動作しないことが多いので、この状態はあまりよくありません。
ここでは、安全な通信で送信されているデータが、ブログ等での投稿者が書いてある内容で、安全ではない通信で送信されているデータが、AmazonJSが参照するAmazon アソシエイトの情報です。
なので、その情報を安全な通信で送信するようにすると、正しくAmazonJSが動作するようになります。
解決方法
AmazonJSでは、プラグイン内(wp-content/plugins/amazonjs)の amazonjs.php の部分でAmazon アソシエイトの情報を参照しています。
なので、このファイル内に表示されない原因となる部分があります。
このファイルの一部を書き換えるのですが、ファイルの中に、前後に空白が空いたsrcから始まる下記のようなものがあると思います。記号* は、各自置き換えて考えてください。
'JP' => array(
'label' => __( 'Japan', $this->text_domain ),
'domain' => 'Amazon.co.jp',
'baseUri' => 'http://webservices.amazon.co.jp',
'linkTemplate' => '<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=${t}&o=9&p=8&l=as1&asins=${asins}&fc1=${fc1}&IS2=${IS2}<1=${lt1}&m=amazon&lc1=${lc1}&bc1=${bc1}&bg1=${bg1}&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>',
'associateTagSuffix' => '-22',
),
ここを下記のように書き換えます。
'JP' => array(
'label' => __( 'Japan', $this->text_domain ),
'domain' => 'Amazon.co.jp',
'baseUri' => 'http://webservices.amazon.co.jp',
'linkTemplate' => '<iframe src="//rcm-jp.amazon.co.jp/e/cm?t=${t}&o=9&p=8&l=as1&asins=${asins}&fc1=${fc1}&IS2=${IS2}<1=${lt1}&m=amazon&lc1=${lc1}&bc1=${bc1}&bg1=${bg1}&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>',
'associateTagSuffix' => '-22',
),
重要なのは、src=“の後の「http:」の部分を消すことです。
これで、安全でない通信でAmazonアソシエイトの情報が、送信されることがなくなります。
まとめ
プラグイン内のバグが原因ということで、原因を見つけるのが大変でした。