Zusätzlichen WordPress-Feed anhand benutzerdefinierter Felder erstellen

25. Juli 2011 · Anwendungen · andreas · 2 Kommentare

Obwohl WordPress vielfältige Möglichkeiten bietet, mittels RSS-Feeds auf die Inhalte eines Blogs zuzugreifen, ist in der Grundinstallation keine Möglichkeit vorgesehen, einen individuellen Feed anhand eines (oder mehrerer) benuzerdefinierter Felder zu erstellen.

Ein solcher Feed kann allerdings mit nur wenigen Zeilen Programmcode in der Datei “functions.php” des aktuell gewählten Themes ergänzt werden. Die Zeile

add_action('init', 'mycustomfeed_add_feed');

fügt der WordPress-Initialisierung die eigene Funktion “mycustomfeed_add_feed” hinzu, welche die Einrichtung der benötigten Funktionalität übernimmt.

function mycustomfeed_add_feed() { global $wp_rewrite; add_feed('mycustomfeed','mycustomfeed_feed'); add_action('generate_rewrite_rules', 'mycustomfeed_rewrite_rules'); $wp_rewrite->flush_rules(); }

Die Funktion besteht aus dem Hinzufügen des eigenen Feeds mittels der Funktion add_feed, sowie dem Hinzufügen einer Rewrite-Regel mit Hilfe der Funktion add_action, bevor durch den Aufruf von flush_rules die soeben geänderten Regeln neu eingelesen werden.

function mycustomfeed_rewrite_rules($wp_rewrite) { $my_rules = array( 'feed/(.+)' => 'index.php?feed=' . $wp_rewrite->preg_index(1) ); $wp_rewrite->rules = $my_rules + $wp_rewrite->rules; }

Die hinzugefügte Regel bewirkt das Umschreiben aller aufgerufenen URLs nach dem Schema “/feed/irgendwas” in die Form “?feed=irgendwas”, so daß zum Zugriff auf den neuen Feed auch die erste Schreibweise verwendet werden kann, ohne daß Änderungen an der “.htaccess” vorgenommen werden müssen.

function mycustomfeed_feed() { query_posts('meta_key=mycustomfeed&meta_value=1'); include('wp-includes/feed-rss2.php'); }

Als letztes ändert die eigene Feed-Funktion die Auswahl der auszuliefernden Daten mit Hilfe der Funktion query_posts, bevor durch Aufruf des originalen WordPress-Feedmechanismus die Ausgabe generiert wird.

Im obigen Beispiel werden nur die Beiträge ausgeliefert, die ein benutzerdefiniertes Feld mit Namen “mycustomfeed” und dem Wert “1” enthalten.