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.
[...] von Michaela Kommentar hinterlassen Grazy Girl zeigt in einem Tutorial, wie man sich ein eigenes Wikiofreunde Widget selbst erstellt, da das Widgets vom Style her in die meisten Blogs nicht richtig [...]
[...] durch die Idee von Crazygirl, ein eigenes Wikio-Widget zu erstellen, habe ich den bei ihr gezeigten Code nur für meine Linkseite genutzt und verbaut. [...]
siehst du, das meinte ich: dein Beitrag ist schon in der freunde-Liste, meiner von ca. 18.00 ist noch nicht in Sicht…. und wenn er dann mal erscheint, dann natürlich nicht ganz oben, sondern dann wird er der Einstell-Zeit zugeordnet…. und das finde ich richtig blöd.
(Meine eigenen Artikel sind für mich natürlich nicht wichtig, aber so habe ich immer das Gefühl, etwas zu verpassen, ohne es zu merken, denn ich werde ja wohl nicht als einzige betroffen sein….
Aber deine Wikio-Einbindung sieht klasse aus!
Guten Morgen und einen schönen ersten Advent,
Ich habe aus dem Wikiofreunde Widget einfach diesen Teil…
&style=light&width=270entfernt und wie gewohnt in die Sitebar eingebaut, damit es sich dem Style meines Blogs anpasst.
Aber die restlichen Funktionen, sind natürlich sehr klasse und ich überlege, ob ich es auch einbaue. Vielen Dank!
Liebe Grüße,
Michaela
@Miki: Ich denke das mit Deinen Beiträgen hängt von 2 Faktoren ab: Einmal wie lange Feedburner braucht, um die bei sich drin zu haben und zum zweiten wie lange dann Wikio braucht, um das bei sich zu realisieren. Irgendwo hängt es da bei Dir
Bei meiner Einbindung ist es nun so, dass ich Wikio umgehe und nur den Feedburner Feed, in dem wir ja alle drin sind, einbinde. Wie das Wikio Widget im Hintergrund funktioniert kann ich nicht genau sagen, ich vermute aber, dass es seinen eigenen Feed, der aus dem Feedburner Feed generiert wird, einbindet. Wenn ich meine Ergebnisse im Widget mit den eines Wikio Widgets vergleiche, dann habe ich schon ein paar andere Artikel darin. Aktuell sind werden bei mir drei neuere angezeigt.
Vergleiche mal wenn Du einen neuen Artikel postest meine Ergebnisse, also in meinem Widget, mit denen des Wikio Widgets. Durch den Cache kann es bei mir maximal eine halbe Stunde dauern, bis die Ergebnisse aktualisiert werden.
@Michaela: Erst mal Danke für die Info. Auf die Style-Entfernung wäre ich nicht gekommen, die width hatte ich ebenfalls meinem Blog angepasst.
Übrigens kannst Du auf diese Weise auch ein eigenes Widgets mit Beiträgen nur aus den Blogs des Adventskalenders bauen. Dann einfach das Array, was ich ganz unten im Artikel beschrieben habe, nehmen und alle Feedadressen der 24 teilnehmenden Blogs in das Array schreiben.
Klasse Idee, Crazy.
So gefällt mir das schon viel besser – werde die Tage mal deinen Code schnappen und selbst verbauen!
@Marc: Danke. Bin schon gespannt ob es klappt. Müsste aber, sofern Du WP 2.8 aufwärts nutzt. Am besten langsam Schritt für Schritt einbauen und ausprobieren. Das Code veröffentlichen im Blog ist immer etwas heikel, manchmal geht dann doch das ein oder andere Zeichen baden, vor allem beim Publizieren
Hab´s nun eingebaut und funktioniert klasse. Nochmals vielen Dank! Auch das Widgets mit Beiträgen nur aus den Blogs des Adventskalenders hat gut geklappt und war recht schnell implementiert, allerdings habe ich es wieder entfernt, da es doch recht viel Ladezeit gekostet hat.
Liebe Grüße,
Michaela
@Michaela: Danke für die Info. Ich freu mich, dass der Code funktioniert und somit auch richtig hier in meinem Artikel steht
Dass die Ladezeiten bei mehreren solchen Spielereien in den Keller gehen, kann ich mir schon vorstellen. Eigentlich schade, oder?
Ich spiele gerade etwas damit rum… jetzt sieht man wieder die Nachteile von Feedbruner:
Alle die ihren Feed nicht umleiten, bekommen einen feinen Link – alle anderen einen Feedburner-Link auf den jeweiligen Artikel
@Marc: Oh das ist mir noch gar nicht wirklich aufgefallen. Aber jetzt wo Du es erwähnst, sehe ich es auch.