Wordpress Plugin: Amazon Reloaded zeigt keine Bilder

Um ein paar kleinere Beträge für diesen Blog zu bekommen, arbeite ich gern mit Amazon Affiliate Links. Das ist auch ein vernünftiger Weg, Produktbilder in den Blog zu bekommen. Seit Jahren nutze ich das Plugin für WordPress namens „Amazon Reloaded„. Dieses zeigte plötzlich keine Produktbilder mehr. Statt dem Link zum Bild, gab es einen Link um das Produkt zur Wunschliste zu addieren. Doch ich löste das Problem! (Short english version)

Ein wenig Debugging und eine Analyse der XML-Response von der Amazon Webservice-Schnittstelle ergab, dass ein neues Element mit Links dazu gekommen ist. Das PlugIn nimmt einfach alle Elemente <URL>. Das neue Element <ItemLinks> enthält ebenfalls Kind-Elemente mit <URL>. Diese werden zuerst ausgelesen und das PlugIn kommt durcheinander.

Also einen einfachen Workaround gebastelt und es geht wieder. Für all die, die das Problem auch haben: In der Datei

/wp-content/plugins/amazon-reloaded-for-wordpress/amazon-reloaded-for-wordpress.php

muss folgender Block nach Zeile 82 hinzugefügt werden:

...
$detailPageUrl = $this->getFirstElementValueForTagName($item, 'DetailPageURL');

$itemlinks = $item->getElementsByTagName('ItemLinks')->item(0);
$itemlinks->parentNode->removeChild($itemlinks);

$imageUrls = array();
...

Das ist sicher nicht der goldene Weg, aber es funktioniert. Das neue Element wird einfach entfernt. Dann passt es wieder. Ich werd den Autor mal anschreiben, der keinen Support mehr für das Plugin leistet, da er nun ein kommerzielles Werk erstellte und dieses vertrieben wird. Einen Kommentar im WordPress.org-Forum werd ich platzieren und mal schauen, ob ich das PlugIn auschecke und ändere. Das ist ja der Sinn von Opensource. Ich gab den Hot-Fix auch in das WordPress.org-Support-Forum. Hier.

Wenn man mal da ist, könnte man auch die URL’s für den Amazon-Webservice ändern, diese werden in der Amazon-Doku nicht mehr als

http://ecs.amazonaws.com

sondern nun

http://webservices.amazon.com

aufgeführt. Dazu kann man die 2 Funktionen ganz unten in der Datei ändern, sie lauten dann:

function getAmazonProductSearchRequestUrl($terms, $index) {
  $settings = $this->getSettings();
  $url = "http://webservices.amazon.{$settings['amazon-locale']}/onca/xml?";
  $url .= 'Service=AWSECommerceService&';
  $url .= 'Version=2011-08-01&';
  $url .= 'AssociateTag=' . urlencode( $settings[ 'amazon-associates-id'] ) . '&';
  $url .= "AWSAccessKeyId={$settings['amazon-api-key']}&";
  $url .= 'Operation=ItemSearch&';
  $url .= 'Keywords='.urlencode(str_replace(' ', '%20', $terms)).'&';
  $url .= 'SearchIndex='.urlencode($index).'&';
  $url .= 'ResponseGroup=Small,Images';
  return $url;
}

function getAmazonHelpRequestUrl() {
  $settings = $this->getSettings();
  return 'http://webservices.amazon.'.$settings['amazon-locale'].'/onca/xml?Service=AWSECommerceService&AWSAccessKeyId='.$settings['amazon-api-key'].'&Operation=BrowseNodeLookup&BrowseNodeId=163357';
}

Ich hab eine geänderte Version mal zusammen gepackt und man kann sie hier laden. Beim Entpacken einfach die alte Version überschreiben, dann sollte es passen.