Für Menschen · Seien Sie begeistert und Sie werden begeistern !
WordPress bietet schon lange die Möglichkeit über eigene Funktionen Feeds auszulesen und im Blog zu verwenden. Dabei kommt seit Version 2.8 von WordPress eine neue Funktion zum Einsatz. Es gibt also zwei Möglichkeiten mit Feeds in WordPress zu arbeiten und in beiden Funktionen werden die Daten gecacht. Nicht immer ist das gewollt und daher zeige ich mal auf, wie man auf die unterschiedlichen Cache-Varianten den beiden Funktionen einwirkt.
fetch_feed() Seit WordPress 2.8Mit Version 2.8 von WordPress wurde die Klasse SimplePie in den Core geholt. SimplePie hat sich immer durch eine sehr schnelle Entwicklung und eine stabile nutzerfreundliche Klasse ausgezeichnet. Im Vorfeld wurde MagpieRSS eingesetzt, was in vielen fällen nicht nutzbar war und die Entwicklung ist recht langsam. Seite geraumer Zeit wird auch SimplePie nicht mehr durch die Entwickler betreut, was zuerst für eine gewissen Unruhe in den Entwicklerkreisen sorgte; Entwickler aus dem WordPress-Team kümmern sich aber um die Klasse und sorgen für ihr bestehen. Mehr dazu gibt es meinem Artikel SimplePie Entwicklung gestoppt
Nun ist die Klasse aber im Core von WordPress und eignet sich ebenso für RSS- und ATOM-Feeds. Sie nutzt den Cache von WordPress und der kann via Hook angesteuert werden.
Zuerst aber ein kleines Beispiel um einen Feed mit der Klasse in WordPress auszulesen.
<?php
include_once(ABSPATH . WPINC . '/feed.php');
$rss = fetch_feed('http://bueltge.de/feed/');
$rss_items = $rss->get_items( 0, $rss->get_item_quantity(5) );
if ( !$rss_items ) {
echo 'no items';
} else {
foreach ( $rss_items as $item ) {
echo '<p><a href="' . $item->get_permalink() . '">' . $item->get_title() . '</a></p>';
}
}
?>
Das kleine Beispiel liest meinen Feed aus und gibt die letzten 5 Einträge zurück.
Kern ist die Funktion fetch_feed(). Diese Funktion besitzt einen Hook, durch den man auf das Caching Einfluss nehmen kann - wp_feed_cache_transient_lifetime.
Im Standard ist der Cache auf 12 Stunden (43200) eingestellt, was nicht immer im Sinne der Nutzer ist. Der Wert wird über die Methaode WP_Feed_Cache_Transient() bedient, Parameter $lifetime. Daher ist es ratsam, den folgenden kleinen Aufruf zu nutzen, sei es im Plugin oder in der functions.php des Themes.
add_filter( 'wp_feed_cache_transient_lifetime', create_function( '$a', 'return 1800;' ) );
In diesem Beispiel habe ich den Cache auf 30 Minuten gesetzt. Mit Hilfe der Conditional Tags kann man das ganze dann so steuern, dass der Cache-Hook nur angesteuert wird, wenn man auf einer Seite (is_page()) oder bspw. im Frontend (!is_admin()) des Blog ist. Hier muss man einfach die Möglichkeiten nutzen und an die eigenen Bedürfnisse anpassen.
Eine kleine Möglichkeit möchte ich aber noch aufzeigen, verfügbar ab WordPress 2.9 (Ticket 11117), um das Debuggen für Entwickler zu vereinfachen. Damit wird der Cache in der Umgebung deaktiviert, wenn die Konstante WP_DEBUG gesetzt ist, was ab und dann wichtig sein kann. Das Setzen der Konstante geschieht in der Regel in der wp-config.php der Installation, alternativ natürlich auch im Plugin.
function do_not_cache_feeds(&$feed) {
$feed->enable_cache(false);
}
if ( defined('WP_DEBUG') && WP_DEBUG )
add_action( 'wp_feed_options', 'do_not_cache_feeds' );
fetch_rss()Eine weitere Funktion ist fetch_rss(), die mit WordPress 2.8 auf die Abkündigungsliste gesetzt wurde. Als Alternative ist die oben genannte Funktion aktiv. Aktuell ist fetch_rss() aber noch verfügbar und wird auch unterstützt. Daher zur Vollständigkeit, auch hier die Möglichkeit den Cache zu beeinflussen.
Aber auch dazu zuvor ein Beispiel um den Feed auszulesen und die letzten 5 Einträge des Feed auszugeben.
<?php
include_once(ABSPATH . WPINC . '/rss.php');
$rss = fetch_rss('http://bueltge.de/feed/');
$rss_items = array_slice($rss->items, 0, 5);
if ( empty($rss_items) ) {
echo 'no items';
} else {
foreach ( $rss_items as $item ) {
echo '<p><a href="' . $item['link'] . '">' . $item['title'] . '</a></p>';
}
}
?>
Hier wird die Funktion fetch_rss() zum Auslesen genutzt und der Cache kann via Konstanten verändert werden. Diese muss man entweder direkt in der wp-config.php definieren, wo sie dann global für alle Anwendungen gelten, oder man muss sie in seine eigenen Funktionen integrieren.
define('MAGPIE_CACHE_ON', 0); // deaktiviert den Cache
define('MAGPIE_CACHE_AGE', 60*60) // Cache 1 Stunde in Sekunden
Da man sich bei WordPress entschieden hat, MagpieRSS in der Zukunft nicht mehr zu unterstützen, sollte man sich bei neuen Aufgaben immer mit SimplePie auseinandersetzen und die zweite Möglichkeit nicht in Betracht ziehen. Insofern muss man auch nicht die vielen anderen Konstanten von MagpieRSS in WP kennen.
Kommentarregeln: Bleib cool, kritisch ist in Ordnung, aber wenn du unhöflich bist, dann lösche ich deinen Kommentar. Bitte benutze deinen persönlichen Namen oder Initialen und nicht den Namen eines Unternehmens, dies würde als Spam gewertet und wird gelöscht. Der Zusammenhang zwischen Namen und URL sollte nicht offensichtlich auf Spam hindeuten! ♥ Ansonsten, vielen Dank für den Kommentar und viel Spaß mit meinem Blog.
händischer Spam:
Beachte die Kommentarregeln, jede Form von versuchtem Spam wird gelöscht. Warum und wieso steht in einem meiner Beiträge.
Bezug auf Textstellen:
Du kannst direkt bezug auf Textstellen im Beitrag nehmen. Dazu muss lediglich der Bereich im Artikel markiert werden; daraufhin erscheint ein Button, der den markierten Text in das Kommentarfeld übernimmt und als Zitat auszeichnet. Die Funktion ist nur bei aktivem JavaScript nutzbar.
xHTML:
Du kannst folgende Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <pre> <em> <strong> <strike> <ul> <ul> <li>
Achte darauf, wenn du Code im Kommentar hinterlegen willst, dann muss der Code maskiert sein. Dann wird er nicht interpretiert. Der Code muss mit Hilfe von HTML-Entities dargestellt werden, d.h. dass man z.B. < als < und > als > einfügt.
E-Mail-Benachrichtigung bei neuen Kommentaren ?
Wenn der Haken in der Checkbox gesetzt ist, dann wirst du über neue Kommentare vie E-Mail informiert. Der Versand erfolgt nur, wenn du die URL in der Bestätigungs-E-Mail genutzt hast oder schon Abonnent hier im Blog bist.
Kommentar erscheint nicht:
Alle Kommentare werden manuell geprüft, freigegeben und nach Möglichkeit beantwortet. Bitte um etwas Geduld und Nachsicht.
Identifikationsbilder (Avatare):
Auf Gravatar.com kann man sich mit seiner E-Mail-Adresse registrieren und ein Bild hochladen, dann erscheint dieses Gravatar hier und in vielen weiteren Blogs.
Spamschutz:
Das Kommentarformular ist mit einem Spamschutz ausgerüstet. Solltest du diesen Artikel ohne JavaScript besuchen und kommentieren wollen, so muss du die Frage beantworten und das jeweilige Wort in das Textfeld eingeben.
bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.
Das Weblog wird angetrieben von WordPress und aktuell gibt es 892 Beiträge, 16496 Kommentare in 14 Kategorien und 450 Tags.
Das Blog wird liebevoll mit xHTML & CSS in Handarbeit gestaltet.
Design und Code ist unter Copyright
© 2001 - 2010 bueltge.de [by:ltge.de]
15. November 2009 um 01:59
Ist in jedem Falle eine interessante Alternative. Werd mal drüber nachdenken ...
Aber bin eh gespannt - was da mit dem neuen 2.9er alles auf uns zu kommt .. und dann mach ich mir den Kopf ...
19. November 2009 um 14:42
witzig. genau gestern habe ich mich darum gekümmert. simplepie ist ein kleines geniales und wirklich super dokumentiertes werkzeug für rss-freaks.