xt:Commerce zwingen RSS-Feeds von WordPress anzubieten
In einem vorherigen Post zu WordPress und xt:Commerce haben wir bereits unseren xt:Commerce Onlineshop um die Ausgabe von Postings aus WordPress heraus erweitert. Nun greifen wir noch einmal tief in die SEO-Trickkiste und erweitern unseren xt:Commerce Shop noch einmal. Unser Ziel: Wir wollen unseren Kunden ebenfalls einen RSS-Feed zum abonnieren anbieten, denn wer schaut schon jeden Tag in unseren Shop ob es neue Artikel oder Informationen gibt? Genau - keiner.
Auf konversationskraft.de gibt es eine Folge wie man die Konversationsrate steigern kann. Einer der sieben Ebenen die Konversationsrate zu steigern ist es, den Komfort des Onlineshops zu steigern - denn wie der Text richtig feststellt - Menschen sind faul. Jeder Gedanke zuviel kann ein Minuspunkt sein - im Falle eines Onlineshops wie xt:Commerce oder Magento auch ein Minuspunkt für unser SEO. Denn das beste SEO bringt für einen Shop nichts, wenn die Konversationsrate im Keller ist.
Wo starten wir, wo fangen wir an?
Zunächst einmal sollte man eine WordPress-Installation haben wie z. B. aus diesem Post. Wir werden auch hier wieder eine kleine SQL-Anweisungen schreiben und eine externe Klasse damit beauftragen unserem xt:Commerce Shop einen RSS-Feed anbieten zu lassen.
Das benötigte Handwerkszeug
Neben WordPress und xt:Commerce benötigt man natürlich auch wie schon oben beschrieben eine kleine PHP-Klasse. Wir werden in diesem Post den Feedcreator von Bitfolge.de benutzen. Es gibt mit Sicherheit noch andere PHP-Klassen welche dasselbe umsetzen aber für unsere Zwecke soll dies erst einmal genügen.
Mit dem Feedcreator können wir anhand von Daten die entweder per Hand eingetragen oder aus einer Datenbank gewonnen werden einen gültigen RSS-Feed basteln und diesen am Ende auch als solchen zum abonnieren anbieten.
Die feedcreator.class.php fügen wir (nachdem wir ja ordnungsliebende Menschen sind) dem Klassen-Ordner von xt:Commerce hinzu (/includes/classes).
Unser Skript zum Bauen eines RSS-Feeds für xt:Commerce
Nun benötigen wir noch eine Datei, die unsere Daten auch zu einem RSS-Feed verarbeitet. Dafür legen wir uns in der root (oder sonst wo) eine rss.php an (Name kann frei gewählt werden). Nachfolgend steht schon einmal der komplette Code. Im Anschluß gehe ich gezielt darauf ein:
<?php
function datum($stamp)
{
if($stamp != '')
{
$temp = substr($stamp,0,10);
$array = explode('-',$temp);
$temp = $array[2].'.'.$array[1].'.'.$array[0];
}
return $temp;
}
include ("includes/classes/feedcreator.class.php");
mysql_connect("localhost","user","pass"); // please set these values as in configuration.php or wp-config.php
@mysql_select_db("tabelle") or die( "Unable to select database");
/* RSS FEED erstellen */
//define channel
$rss = new UniversalFeedCreator();
$rss->title="Demo RSS-Feed";
$rss->description="Neueste Informationen aus dem demo Shop";
$rss->link="http://www.url.de/";
$rss->syndicationURL="http://www.url.de/rss.php";
/* RSS FEED erstellen ENDE */
$query="SELECT ID, post_title, post_date_gmt, post_excerpt from wp_posts WHERE post_category = '0' AND post_status = 'publish' ORDER BY id DESC";
$result=mysql_query($query);
$num=mysql_numrows($result);
$i=0;
while ($i < $num) {
$item = new FeedItem();
$item->title = mysql_result($result,$i,"post_title");
$item->link = "http://www.url.de/shop_content.php?coID=99&amp;postid=".mysql_result($result,$i,"ID");
$item->description = utf8_encode(mysql_result($result,$i,"post_excerpt"));
$item->source = "http://www.url.de";
$item->author = "info@url.de";
$item->date = date("U",strtotime(datum(mysql_result($result,$i,"post_date_gmt"))));
$rss->addItem($item);
$i++;
}
$rss->outputFeed("RSS2.0");
?>
Was passiert in diesem Code?
Gehen wir einmal von oben durch den Code durch. Zunächst haben wir eine kleine Helfer-Funktion welches uns das Datum nach deutschem Format ausgibt.
Danach binden wir die Klasse von bitfolge.de ein, damit diese im späteren Verlauf angesprochen werden kann.
Nun müssen wir eine Verbindung mit mysql herstellen bzw. mit der Datenbank von WordPress, damit wir diese Daten dann zum Verarbeiten an xt:Commerce schicken können. Ich benutze hier einmal die "alte" Variante des Aufrufes, da viele Server noch kein mysqli können.
Jetzt geht der Zauber erst richtig los. Wir erstellen ein neues Objekt und verbinden dieses mit dem UniversalFeedCreator();. Damit sind alle Funktionen die die Klasse bietet in dieser einen Variable. Jetzt kümmern wir uns ein wenig um die statischen Inhalte des Feeds, wie Beschreibung, Link und die Feed-Adresse.
Damit die Klasse auch Daten verarbeiten kann, müssen wir erst bei der WordPress-Datenbak Daten anfordern. Dies machen wir mit einer kleinen SQL-Anweisungen in der wir das wichtigste auslesen. In diesem Fall lesen wir den Titel, das Datum und den Excerpt des Posts aus, welche in der Kategorie 0 (meistens Standardkategorie "Allgemein") liegen und veröffentlicht wurden. Die Zeile kann selbstredend nach eigenen Wünschen und Belieben angepasst werden.
Nachdem die Daten aus der WordPress Datenbank erfolgreich ausgelesen wurden, können wir diese nun in einer Schleife an die Variable $rss weitergeben. Die Schleife muss man folgendermaßen lesen: Solange die Zählvariable 0 kleiner als die Anzahl der ausgelesenen Posts ist, solange sollen Postings unserem RSS-Feed hinzugefügt werden.
Um das zu erreichen erstellen wir zunächst eine temporäre Variable für das Item ($item = new FeedItem();). Nun müssen wir dem Eintrag einige Daten beifügen, damit diese später auch ausgegeben werden können. Zunächst wählen wir einen Titel und benutzen mit der Funktion mysql_result() die Möglichkeit den post_title der aktuellen Ergebniszeile auszulesen.
Ein Link zum Posting auf der Seite darf natürlich auch nicht fehlen (schon gar nicht, wenn wir nur einen Excerpt ausgeben). Diesen verlinken wir auf die angelegte Content-Seite, welche unsere RSS-Feeds in html-Form ausgibt. Mit der Description fügen wir dem Item unseren eigentlichen Inhalt zu, im aktuellem Codestück "post_excerpt". Jetzt folgen noch Angaben wie Quelle und Author sowie das Datum wann das Posting veröffentlicht wurde.
Jetzt ist es noch ganz wichtig, die Variable $item unserer eingangs erstellten Variable $rss anzuhängen und die Zählvariable zu erhöhen.
Das einzige was noch fehlt ist die Ausgabe. Wir wählen den Modus RSS2.0. Dies geschieht mit $rss->outputFeed("RSS2.0");
xt:Commerce zwingen RSS-Feeds anzubieten
Wie man weiß bietet xt:Commerce standardmäßig keine Möglichkeit RSS-Feeds anzubieten, also wurde auch der RSS-Link im Header weggelassen. Ein Umstand dem wir jetzt etwas Abhilfe schaffen. Wie wir mittlerweile wissen, finden alle Aktionen, die sich im Header-Bereich von xt:Commerce befinden in der Datei "header.php" im Includes-Ordner statt. Wir öffnen also diese Datei und fügen im
-Bereich folgende Zeile hinzu:<link rel="alternate" type="application/rss+xml" title="beaniebee RSS-Feed" href="http://www.beaniebee.com/rss.php" />
Erweiterungsmöglichkiten
Das war auch schon der ganze Zauber. Wie Ihr seht ist das wirklich gar nicht schwer und kann auch zeitnah umgesetzt werden. Aber wie kann man das erweitern, man sieht ja immer wieder Shops in denen mehr wie 1 RSS-Feed angeboten wird. Wir könnten z. B. mehrere Dateien anlegen um z. B. RSS-Feeds für neue Artikel sowie seperate RSS-Feeds für News rund um das Shop-Thema anlegen zu lassen. Man könnte auch den Inhalt anpassen und und und ... Es gibt soviele Möglichkeiten - was habt Ihr so an Ideen für eine Optimierung? Ihr könnt Euch gerne in den Kommentaren auslassen.
Weiterführende Links
- Konversationskraft des Shops mit Komfort verbessern
- PHP-Klasse Universal Feed Generator
- Funktionsbeschreibung mysql_result()
Alle Posts der Woche 37 / 2009 anschauen
Fandest Du den Beitrag interessant?
Fatal error: Call to undefined function the_flattr_permalink() in /var/www/html/web1028/html/seo-geek-de/wp-content/themes/seogeek/single.php on line 48





