smart | Webentwicklung
Alles rund um HTML5, PHP, WordPress & Co.

WordPress: Eigenen Feed erstellen

28. Januar 2013
Stephan
WordPress: Eigenen Feed erstellen

In WordPress gibt es nahezu für alles eines Feed. Neben dem Hauptfeed und den Kommentarfeeds gibt es z.B. auch Feeds für einzelne Kategorien.

Eine kleine Übersicht zu allen verfügbaren Feeds von WordPress findet ihr auf perun.net.

Trotz der Fülle an Feeds, kann es passieren, dass ihr einen individuellen Feed haben wollt. Beispielsweise könnte es sein, dass ihr eine Feed haben möchtet, der die Artikel von zwei thematisch zusammenpassenden Kategorien anzeigt.

In diesem Artikel zeige ich euch, wir ihr einen solchen eigenen Feed für euren WordPress Blog erstellen könnt.

Template für eigenen Feed erstellen

Als erstes benötigen wir natürlich ein Template für unseren neuen Feed. Dazu legt in eurem Theme-Verzeichnis eine neue Datei an. Den Namen der Datei könnt ihr frei wählen. In meinem Fall habe ich sie einfach mal als custom-rss2-feed.php bezeichnet.

Der Einfachheit halber kopieren wir einfach den Inhalt von wp-includes/feed-rss2.php in unsere angelegte Datei:

header('Content-Type: ' . feed_content_type('rss-http') . '; charset=' . get_option('blog_charset'), true);
$more = 1;

echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>'; ?>

<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	<?php do_action('rss2_ns'); ?>
>

<channel>
	<title><?php bloginfo_rss('name'); wp_title_rss(); ?></title>
	<atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
	<link><?php bloginfo_rss('url') ?></link>
	<description><?php bloginfo_rss("description") ?></description>
	<lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></lastBuildDate>
	<language><?php bloginfo_rss( 'language' ); ?></language>
	<sy:updatePeriod><?php echo apply_filters( 'rss_update_period', 'hourly' ); ?></sy:updatePeriod>
	<sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', '1' ); ?></sy:updateFrequency>
	<?php do_action('rss2_head'); ?>
	<?php while( have_posts()) : the_post(); ?>
	<item>
		<title><?php the_title_rss() ?></title>
		<link><?php the_permalink_rss() ?></link>
		<comments><?php comments_link_feed(); ?></comments>
		<pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_time('Y-m-d H:i:s', true), false); ?></pubDate>
		<dc:creator><?php the_author() ?></dc:creator>
		<?php the_category_rss('rss2') ?>

		<guid isPermaLink="false"><?php the_guid(); ?></guid>
<?php if (get_option('rss_use_excerpt')) : ?>
		<description><![CDATA[<?php the_excerpt_rss(); ?>]]></description>
<?php else : ?>
		<description><![CDATA[<?php the_excerpt_rss(); ?>]]></description>
	<?php $content = get_the_content_feed('rss2'); ?>
	<?php if ( strlen( $content ) > 0 ) : ?>
		<content:encoded><![CDATA[<?php echo $content; ?>]]></content:encoded>
	<?php else : ?>
		<content:encoded><![CDATA[<?php the_excerpt_rss(); ?>]]></content:encoded>
	<?php endif; ?>
<?php endif; ?>
		<wfw:commentRss><?php echo esc_url( get_post_comments_feed_link(null, 'rss2') ); ?></wfw:commentRss>
		<slash:comments><?php echo get_comments_number(); ?></slash:comments>
<?php rss_enclosure(); ?>
	<?php do_action('rss2_item'); ?>
	</item>
	<?php endwhile; ?>
</channel>
</rss>

Jetzt können wir das Template beliebig anpassen. In unserem Fall wollen, wir dass unser neuer Feed die Artikel zwei bestimmter Kategorien anzeigt.

Dazu fügen wir direkt am Anfang der Datei folgenden Code ein:

query_posts(array(
    'cat' => '3,4'
));

Damit teilen wir WordPress mit, dass nur Artikel angezeigt werden, die der Kategorie mit der ID 3 bzw. 4 zugeordnet sind.

Feed hinzufügen

Damit unser neuer Feed nun auch abrufbar ist, müssen wir WordPress mitteilen, dass es einen neue Feed gibt. Hierfür öffnet die functions.php eures Themes und fügt Folgendes ein:

add_feed('custom', 'create_custom_feed');

function create_custom_feed() 
{
    load_template(TEMPLATEPATH . '/custom-rss2-feed.php');
}

Nun ist unser Feed abrufbar und zwar unter der folgende Adresse:

http://www.dein-blog.de/?feed=custom

Permalink für den eigenen Feed erzeugen

Unser neuer Feed ist derzeit nur über eine nicht so schöne URL mit zusätzlichem Query String abrufbar. Damit wir eine „schönere“ URL erhalten, fügen wir Folgendes in unsere functions.php:

function add_my_feed()
{
     flush_rewrite_rules();
}

add_action('init','add_my_feed');

Jetzt öffnet eien beliebige Seite eures Blogs. Danach sollte unser Feed auch unter dieser Adresse abrufbar sein:

http://www.dein-blog.de/feed/custom

Nachdem das funktioniert, könnt ihr den zuletzt eingefügten Code (flush_rewrite_rules) wieder löschen. Den Code haben wir nur benötigt um die URL-Rewrite-Regeln von WordPress zu aktualisieren.

Der Aufruf von flush_rewrite_rules wird nur einmal benötigt, da die Rewrite-Rules in der Datenbank gespeichert sind. Nach der Akatuslierung befindet sich in der Datenbank eine neue Rewrite-Regel für unseren erstellten Feed.

Fazit

Falls euch die Standard-Feeds von WordPress mal nicht ausreichen sollten, habt ihr nun gelernt, wie ihr einfach einen eigenen WordPress Feed erstellen könnt.

Beispielweise könntet ihr auch den Hauptfeed von WordPress auf euren neuen Feed umleiten, falls ihr mit dem standardmäßigen Hauptfeed von WordPress nicht zufrieden seid.

Kommentare  
2 Kommentare vorhanden
1 Andre schrieb am 26. November 2013 um 17:38 Uhr

Habe die Anleitung gefolgt und jetzt funtioniert garnichts mehr. Bekomme dies Fehlermeldung:
Fatal error: Cannot redeclare class WP_Embed in /htdocs/store/wp-includes/media.php on line 1040

Ich glaube das lag an dieser Function: flush_rewrite_rules

Wie kann ich alles wieder rückgängig machen?

2 Stephan L. schrieb am 26. November 2013 um 20:34 Uhr

Hallo Andre,

tut mir leid, dass es bei dir nicht funktioniert und zu allem Überfluss danach gar nichts mehr funktioniert hat.

Gelangst du noch in den Admin-Bereich? Da einfach mal, nachdem du den eingefügten Code aus der functions.php wieder entfernt hast, unter Einstellungen – Permalinks diese neue erstellen lassen.

Gruß Stephan

0 Trackbacks/Pingbacks vorhanden
Du bist herzlich eingeladen auch ein Kommentar zu hinterlassen!
Kommentar schreiben

Vielen Dank für dein Kommentar!