Ted van Geest

Archive for the ‘Wordpress’ Category

Volledige RSS-feeds weergeven in WordPress

Thursday, January 20th, 2011

Je wilt je site aantrekkelijker maken voor je bezoekers, maar je hebt gewoon niet meer content om te publiceren. Dan kun je de rest vullen met onzin, maar je kunt ook iets nuttigs plaatsen: vul je site aan met de rss-feed van andere site die nuttige informatie bevat voor je bezoekers!

Er zijn veel omschrijvingen hoe je een rss-feed kunt toevoegen aan WordPress, maar hoe integreer je die code nu op zo’n manier in je template dat je er ook nog controle over hebt vanuit je admin-omgeving? Dat ga ik uitleggen in de onderstaande tutorial. Ik leg je uit hoe je een pagina-template maakt waarmee je door het toevoegen van Custom Fields kunt bepalen welke rss-feed  er op de pagina te zien is. Ik pas hiervoor de pagina-template aan van het Twenty-Ten thema die standaard bij WordPress 3.x wordt meegeleverd.
Deze tutorial gaat ervan uit dat je een werkende WordPress 3.x installatie hebt, dat je actieve thema het Twenty-Ten thema is en dat je het te maken template opslaat in de locatie van het Twenty-Ten thema.

De code die ik gebruik voor het toevoegen van de rss-feed is redelijk algemeen. Wat de code doet staat uitstekend uitgelegd op de volgende website: http://digwp.com/2009/11/import-and-display-feeds-in-wordpress/. Lees deze tutorial eens door, dan is de rest van deze uitleg makkelijker te begrijpen.

Weer terug? Mooi!
Met de code van digwp.com als basis, gaan we werken met  de volgende code:

<?php if(function_exists('fetch_feed')) {
	$feed = fetch_feed('http://feeds.feedburner.com/jquery/'); // specify the source feed
	$limit = $feed->get_item_quantity(7); // specify number of items
	$items = $feed->get_items(0, $limit); // create an array of items
}
if ($limit == 0) echo '<div>The feed is either empty or unavailable.</div>';
else foreach ($items as $item) : ?>
<object>    
 <h2> <?php echo $item->get_title(); ?></h2>
 <a href="<?php echo $item->get_permalink(); ?>" title="<?php echo $item->get_date('j F Y @ g:i a'); ?>">Read the original source.</a>

 <?php echo substr($item->get_content(), 0, 5000); ?> 

</object>
<?php endforeach; ?>

Ik heb de code van digwp.com iets aangepast, zodat het beter samenwerkt met het Twenty-Ten thema.

We gaan eerst een template maken voor rss-feeds. Open hiervoor page.php van het Twenty-Ten thema (locatie wordpress/wp-content/themes/twentyten/).
Eerst maken we van page.php een nieuw template. Zet bovenaan de pagina direct onder de php-tag de volgende comment:

/*
Template Name: display RSS
*/

Sla vervolgens de code op met de naam rss_page.php. Je hebt nu een template aangemaakt. Als je in de admin omgeving van WordPress een pagina aanmaakt (pages -> new), zie je dat je nu het template “display RSS” kunt kiezen. Het template doet echter nu nog precies hetzelfde als de algemene pagina template. Dat gaan we nu veranderen.

We gaan er eerst voor zorgen dat onze ‘display RSS’ template een rss-feed kan weergeven. Zoek daarom in het bestand de volgende regel op:

<?php endwhile; ?>

Plak direct onder deze regel de volledige code zoals ik die hierboven gegeven heb. Sla het template op.  Maak, om te testen of alles goed is gegaan, een pagina aan en selecteer de ‘display RSS’ template. De titel en content doen er niet zoveel toe, maar laten we als titel eens ‘rss-test’ gebruiken. Schakel ook de mogelijkheid om commentaar te geven uit door het vinkje bij de optie ‘Allow Comments’ weg te halen. Het maakt voor de werking van het template niet uit, maar comments op je pagina boven de rss-feed staat een beetje stom…
Sla de pagina op en bekijk hem. Je ziet nu 7 items van het altijd spannende jQuery Blog staan.

Ons template kan nu maar één rss-feed weergeven. Als je een andere zou willen weergeven, moet je steeds in de broncode duiken of voor elke rss-feed een ander template maken. Dat is wat omslachtig. We gaan het template nu zo aanpassen dat je met een Custom Field kunt bepalen welke feed je wilt weergeven.

Aan elke pagina kun je Custom Fields toevoegen. Op deze manier kun je je pagina’s variabelen meegeven die je in je templates kunt uitlezen.
Voeg aan onze ‘test-rss’ pagina het Custom Field ‘rss’ toe en geef als waarde (value) het pad op van een willekeurig bestaande rss-feed, laten we zeggen: http://www.tedvangeest.nl/feed/ . Klik vervolgens op de knop ‘Add custom field’ om het toe te voegen.

Nu moeten we ons template laten reageren op ons nieuwe Custom Field. Verander de laatst toegevoegde code in dit:

<?php // if a page has a RSS Custom Field defined, display the feed
 if ( get_post_meta($post->ID, 'rss', true) ) {
   if(function_exists('fetch_feed')) {
     $rss = get_post_meta($post->ID, 'rss', true);
     $feed = fetch_feed($rss); // specify the source feed
     $limit = $feed->get_item_quantity(10); // specify number of items
     $items = $feed->get_items(0, $limit); // create an array of items
   }
   if ($limit == 0) echo '<div>The feed is either empty or unavailable.</div>';
   else foreach ($items as $item) : ?>
     <object>
       <h2> <?php echo $item->get_title(); ?></h2>
       <a href="<?php echo $item->get_permalink(); ?>" title="<?php echo $item->get_date('j F Y @ g:i a'); ?>">Read the original source.</a>
       <?php echo substr($item->get_content(), 0, 5000); ?>
     </object>
   <?php endforeach;
 } ?>

De eerste commentaarregel is niet perse nodig, maar wel een goede gewoonte om terug te kunnen lezen wat de code doet. Nu de toegevoegde functionaliteit.

De regel

 if ( get_post_meta($post->ID, 'rss', true) ) {
  ...
}

controleert of de pagina wel een Custom Field tag heeft dat ‘rss’ heet. Als dat niet het geval is wordt de code tussen de accolades niet uitgevoerd.

De volgende aangepaste regel is:

 $rss = get_post_meta($post->ID, 'rss', true);

In de oorspronkelijke code werd de variable $rss gevuld met een directe verwijzing naar de jQuery Blog rss. Nu vullen we de variable $rss met waarde die we in het Custom Field ‘rss’ hebben ingevuld bij het aanmaken van onze pagina.
Sla het template op en ververs de pagina ‘test-rss’. Als het goed is is de rss feed van de jQuery Blog nu vervangen met het veel interessantere blog van Yours Truelly. 🙂

Voortaan als je een nieuwe rss feed wilt weergeven, dan maak je een nieuwe pagina aan en geef je in je Custom Field ‘rss’ een andere link naar een rss-feed op.
De bovenstaande tutorial geeft je voldoende informatie om meer invloed op het template uit te oefenen door het template te laten reageren op andere Custom Fields. Bepaal bijvoorbeeld vanuit je WordPress Admin omgeving hoeveel items er op de pagina moeten verschijnen door de variable $limit via een Custom Field aanpasbaar te maken.

Verder kun je natuurlijk het uiterlijk van je rss-feed aanpassen en bepalen welke items je uit de rss feed wilt tonen. Kijk voor dit laatste op http://simplepie.org/wiki/ en op http://simplepie.org/wiki/reference/start .
En mocht je aan het begin de tutorial op digwp.com niet gelezen hebben en het toch nog niet helemaal snappen, ga dan alsnog naar http://digwp.com/2009/11/import-and-display-feeds-in-wordpress/.

Blog

blog categoriën

Eigen sites/ bijdragen

Ook leuk!

Over

Projecten

Ted op Twitter: