Da mir die Farbgestaltung und teilweise auch die Linkgestaltung des Wikiofreunde Widgets nicht wirklich zusagt, habe ich mich heute auf die Suche gemacht, wie man ein solches Widget für seine Sidebar selbst erstellen könnte. Seit WordPress 2.8 läuft die WordPresseigene Funktion fetch_feed mit der Klasse SimplePie im Core. Damit eröffnet sich schon fast eine ungeahnt große Welt um externe Feeds in den eigenen Blog zu holen.
Mit Hilfe von Frank Bueltges Artikel Feed Cache von WordPress sowie der SimplePie Documentation habe ich nun via PHP so einiges zusammengebastelt, was manuell in die functions.php und in die sidebar.php eingebunden werden kann. Das Ergebnis seht Ihr in meiner Sidebar: das selbst erstellte Wikiofreunde Widget.
Nachfolgend liste ich Euch die Vorgehensweise und entsprechenden Codes auf, so dass Ihr sie bei Euch bei Bedarf nachbauen könnt.
Als Erstes nehmen wir die functions.php. Dort benötigen wir zum einen ein Herabsetzen der Feed Cache Zeit auf 30 Minuten und zum anderen eine Funktion, die es ermöglicht die Artikelbeschreibungen zu kürzen.
Um den Feed Cache von 12 Stunden (Standardeinstellung) auf 30 Minuten herabzusetzen, ist folgender Code in der functions.php notwendig:
add_filter( 'wp_feed_cache_transient_lifetime', create_function( '$a', 'return 1800;' ) );
Nun noch die Funktion, um die Artikelbeschreibungen der einzelnen Feeds zu kürzen (Quelle: SimplePie Dokumentation):
function shorten($string, $length)
{
// By default, an ellipsis will be appended to the end of the text.
$suffix = '...';
// Convert 'smart' punctuation to 'dumb' punctuation, strip the HTML tags,
// and convert all tabs and line-break characters to single spaces.
$short_desc = trim(str_replace(array("\r","\n", "\t"), ' ', strip_tags($string)));
// Cut the string to the requested length, and strip any extraneous spaces
// from the beginning and end.
$desc = trim(substr($short_desc, 0, $length));
// Find out what the last displayed character is in the shortened string
$lastchar = substr($desc, -1, 1);
// If the last character is a period, an exclamation point, or a question
// mark, clear out the appended text.
if ($lastchar == '.' || $lastchar == '!' || $lastchar == '?') $suffix='';
// Append the text.
$desc .= $suffix;
// Send the new description back to the page.
return $desc;
}
In der sidebar.php muss nun an entsprechender Stelle der Code für die Ausgabe der Wikiofreunde Feeds implementiert werden (Quelle WordPress Funktionsreferenz):
<ul>
<?php include_once(ABSPATH . WPINC . '/feed.php');
$rss = fetch_feed('http://feeds.feedburner.com/Wikiofreunde');
$maxitems = $rss->get_item_quantity(5);
$rss_items = $rss->get_items(0, $maxitems);
if ($maxitems == 0) echo '<li>No items.</li>';
else
foreach ( $rss_items as $item ) : ?>
<li>
<a target="_blank" href='<?php echo $item->get_permalink(); ?>'>
<?php echo $item->get_title(); ?></a><br />
<?php echo shorten($item->get_description(), 100); ?>
<?php echo $item->get_date('(j.m.Y | H:i '); echo 'Uhr)'; ?>
</li>
<?php endforeach; ?>
</ul>
In der Klammer bei get_item_quantity ist die gewünschte Anzahl der Beiträge die im Wikiofreunde Widget ausgegeben werden soll anzugeben.
Unten im Code in der Zeile <?php echo shorten($item->get_description(), 100); ?> ist bei der Zahl 100 die gewünschte Zahl der Zeichen anzugeben, auf welche die Artikelbeschreibung gekürzt werden soll.
Auf diese Weise kann man übrigens auch super ein Widget für die Blogs seiner eigenen Wahl erstellen. Dann z.B. die Zeile
$rss = fetch_feed('http://feeds.feedburner.com/Wikiofreunde');
ersetzen mit einer Auswahl mehrere Feedadressen der gewünschten Blogs:
$rss = fetch_feed(array(
'http://www.blog1.de/feed/',
'http://www.blog2.de/feed/',
'http://feeds.feedburner.com/blog3'));
Sollte beim Einbau was schief gehen, seht Euch bitte auch meine Quellen genau an. Schritt für Schritt durchgeführt läuft das hier auf meinem Blog alles wunderbar. Gerade bei so großen Codeschnipseln ist das nur nicht ganz so einfach die im Artikel zu posten, da viele Zeichen mit den entsprenden HTML Codes maskiert werden müssen und da könnte das ein oder andere schon mal untergehen oder beim Publizieren “abgemurxt” werden. Die beiden Funktionen für die functions.php habe ich 1:1 aus den Quellen übernommen. Nur beim Code in der sidebar.php habe ich etwas rumgespielt und den Original-Code aus der WordPress Funktionsreferenz erweitert.
An dieser Stelle möchte ich auch noch kurz auf den Artikel von Tim Wikio Freunde im eigenen Blog hinweisen, der die Wikiofreunde Beiträge mit Hilfe eines Plugins auf einer WordPress Seite anzeigt. Ich denke das könnte sich auch in einem Widget realsieren lassen, beziehungsweise ist definitiv einfach zu implementieren als meine PHP Tutorial oben.