RSS-Feeds einbinden
Mittlerweile gibt es einige Möglichkeiten, bei WordPress RSS Feeds einzubinden.
Beispielsweise kann man bei Themes, die Widgets unterstützen, das “hauseigene” Widget RSS benutzen. Damit lassen sich sehr einfach in der Sidebar RSS-Feeds oder Atom-Feeds ausgeben. Neben der RSS-Feed-URL kann man noch einen Titel angeben, der dann über den Feed-Links erscheint:

In WordPress vorab eingebautes RSS Widget für die Sidebar
Im obigen Beispiel habe ich mir dafür einen RSS-Feed bei der Twitter-Suche zusammengestellt. Man kann auf der Ergebnisseite bei Twitter die Sprache konfigurieren und diese Ergebnisseite dann als RSS-Feed-URL unter dem Link “Feed for this query” abspeichern (bzw. die Link-Adresse kopieren). Diese wird dann im RSS-Widget eingetragen, mit einem Titel versehen und gespeichert. Ab sofort taucht dann in der Sidebar (bzw. an der Stelle, an der das Widget integriert wurde) die Feed-Link-Liste auf.
RSS Feeds über SimplePie
Eine etwas komplexere aber dafür auch umfangreichere Möglichkeit, RSS-Feeds einzubinden, ist das Plugin SimplePie für WordPress. Genaugenommen werden dabei zwei Plugins benötigt, die beide auch über die Plugin-Datenbank von wordpress.org installiert werden können: SimplePie Core und SimplePie Plugin for WordPress.
Für das SimplePie Plugin muss nach der Aktivierung noch ein Ordner “cache” unter /wp-content/ angelegt (am besten über einen FTP-Client) und mit Schreibrechten (CHMOD 0777) versehen werden.
Das SimplePie Plugin ermöglicht es, RSS-Feeds auch auf Seiten oder innerhalb von Artikeln auszugeben, indem man PHP-Code mit den notwendigen Daten einbindet (dafür ist dann auch das Plugin Exec-PHP notwendig, welches das Verwenden und Ausführen von PHP-Code innerhalb von Artikeln und Seiten erlaubt*).
Ich habe beispielsweise einen Smartphone-Bestseller RSS-Feed von Amazon auf smartphonebox.de eingebaut – und das geht so:
Im Verzeichnis des SimplePie-Plugins gibt es einen Ordner “templates”. Dort kann man eigene Template-Dateien hinterlegen, die die Ausgabe des RSS-Feeds auf der WordPress-Seite festlegen. Für den Amazon-RSS-Feed habe ich folgendes Template angelegt und als “smartphonebox.tmpl” abgespeichert:
<div class="simplepie">
{IF_ERROR_BEGIN}<p>{ERROR_MESSAGE}</p>{IF_ERROR_END}
{ITEM_LOOP_BEGIN}
<p>{ITEM_DESCRIPTION}<hr style="clear:both;" /></p>
{ITEM_LOOP_END}
</div>
Dadurch wird ein Fehler ausgegeben, wenn bei der Verarbeitung des Feeds etwas nicht stimmt bzw. wird einfach der Inhalt des RSS-Feeds (item description) mit Absatz-Tags und einer Horizontalen Linie ausgegeben.
Die dazugehörige Seite, die ich in WordPress angelegt habe, hat diesen Inhalt:
<?php
echo SimplePieWP('http://www.amazon.de/rss/bestsellers/ce-de/569838/ref=pd_ts_rss_link',
array( 'items' => 10,
'strip_attributes' => false,
'strip_html_tags' => false,
'processing' => strip_rangordnung,
'enable_order_by_date' => false,
'template' => smartphonebox,
));
?>
Ich habe noch einige Parameter angegeben, die die Ausgabe bzw. vor allem die Verarbeitung der RSS-Datei von Amazon beeinflussen: ‘strip_attributes’ und ‘strip_html_tags’ => false sorgen dafür, dass sämtliche Attribute, also Klassen-Bezeichnungen und HTML-Kennzeichnungen erhalten bleiben.
Mit ‘processing’ kann man den RSS-Feed nach dem Einlesen und vor der Ausgabe auf der Seite bearbeiten. In diesem Fall schneide ich einen Teil aus dem RSS-Feed von Amazon heraus. Das passiert über die PHP-Datei “strip_rangordnung.php”, die ich im Ordner “processing”, ebenfalls innerhalb des SimplePie-Plugin-Verzeichnisses, hinterlegt habe. Diese sieht so aus:
<?php
class SimplePie_PostProcess {
function item_description($s)
{
return preg_replace('/<br \/><br \/>\(Die Rangordnung[^\)]+\)/', '', $s);
}
}
?>
In diesem Fall wird das RSS-item “description” nach der Zeichenfolge “<br /><br />(Die Rangordnung” (und so weiter) durchsucht und gelöscht. Bei den Amazon-Feeds steht nämlich hinter jedem item der Satz “(Die Rangordnung wird stündlich aktualisiert. In der [...]-Liste finden Sie maßgebliche Informationen über die aktuelle Rangposition dieses Produkts.)”, was ich nicht x-mal wiederholt auf meiner Seite stehen haben möchte.
Danach gebe ich noch über ‘enable_order_by_date’ => false an, dass die Reihenfolge aus dem RSS-Feed einfach übernommen werden soll und keine Sortierung nach Datum erfolgt. Außerdem gebe ich mit dem Parameter “template” an, dass mein selbsterstelltes Template “smartphonebox” verwendet werden soll.
Man kann diese ganzen Parameter auch größtenteils unter den Plugin-Einstellungen von SimplePie for WordPress vornehmen. Bei meiner Vorgehensweise kann ich aber theoretisch mehrere unterschiedlich formatierte RSS-Feeds einbinden und muss mich nicht auf ein Format festlegen.
Nach dem Abspeichern der Seite (Titel nicht vergessen!) hat man es auch schon geschafft. SimplePie liest beim Aufruf der Seite automatisch den RSS-Feed von Amazon ein und gibt den Inhalt auf der Seite aus. Durch die Cache-Funktion passiert dies auch nur, wenn sich am RSS-Feed etwas geändert hat – diese Einstellung sollte man gerade bei umfangreichen RSS-Feeds mit vielen Inhalten und häufigen Änderungen nutzen.
Übrigens habe ich noch das Aussehen über die theme-CSS-Datei formatiert. Daher umgebe ich den item-Loop auch mit einem div-Container und der Klasse “simplepie”. Meine CSS-Formatierung für die Amazon-items sieht so aus – diese ist an mein Theme angepasst, kann also wahrscheinlich nicht 1:1 so übernommen werden:
.simplepie .riRssTitle { font-size:110%; }
.simplepie p img { border:0px none;vertical-align:-3px; }
.simplepie p .riRssContributor { float:right;margin:8px 0px; }
.simplepie .url, .simplepie .url:hover { text-decoration:none;border-bottom:0px none; }
.simplepie .url img { margin-right:8px;margin-bottom:8px; }
*) In den WordPress-Einstellungen unter “Schreiben” sollte unbedingt “WordPress soll falsch verschachteltes XHTML automatisch korrigieren” ausgeschaltet sein, damit Exec-PHP einwandfrei funktioniert. Außerdem muss der Artikel oder die Seite im HTML-Modus bearbeitet und gespeichert werden und nicht im WYSIWYG-Editor.