Return to Snippet

Revision: 43005
at March 15, 2011 04:26 by nicomollet


Initial Code
/*
*	Re-usable RSS feed reader with shortcode
*/
if ( !function_exists('base_rss_feed') ) {
	function base_rss_feed($size = 5, $feed = 'http://wordpress.org/news/feed/', $date = false, $cache_time = 1800)
	{
		// Include SimplePie RSS parsing engine
		include_once ABSPATH . WPINC . '/feed.php';

		// Set the cache time for SimplePie
		add_filter( 'wp_feed_cache_transient_lifetime', create_function( '$a', "return cache_time;" ) );

		// Build the SimplePie object
		$rss = fetch_feed($feed);

		// Check for errors in the RSS XML
		if (!is_wp_error( $rss ) ) {

			// Set a limit for the number of items to parse
			$maxitems = $rss->get_item_quantity($size);
			$rss_items = $rss->get_items(0, $maxitems);

			// Store the total number of items found in the feed
			$i = 0;
			$total_entries = count($rss_items);

			// Output HTML
			$html = "<ul class='feedlist'>";
			foreach ($rss_items as $item) {
				$i++;

				// Add a class of "last" to the last item in the list
				if( $total_entries == $i ) {
					$last = " class='last'";
				} else {
					$last = "";
				}

				// Store the data we need from the feed
				$title = $item->get_title();
				$link = $item->get_permalink();
				$desc = $item->get_description();
				$date_posted = $item->get_date('d/m/Y');
                //$desc = strip_tags($desc);
                $desc =wp_kses(trim($desc),array());
                $desc = apply_filters('the_excerpt', $desc);

                $desc = strip_tags($desc,"");
                //print(' --- strlen : '.strlen($desc));
                $excerpt_length = 100;
                $words = explode(' ', $desc, $excerpt_length + 1);
                //print(' --- words : '.count($words));
                if(count($words) > $excerpt_length) :
                    array_pop($words);
                    array_push($words, '...');
                    $desc = implode(' ', $words);
                endif;
                $desc = trim($desc);

                while(strpos($desc, '  ') !== false)
                    $desc = str_replace('  ', ' ', $desc); //eventually $s will == '/'
                $desc = substr(($desc),10);
				// Output
				$html .= "<li id='post-$i'$last>";
				$html .= "<h4><a href='$link'>$title</a></h4>";
				if( $date == true ) $html .= "<span class='date'>$date_posted</span>";
				$html .= "<div class='rss-entry'>$desc</a></h4></div>";
				$html .= "</li>";
			}
			$html .= "</ul>";

		} else {

			$html = "An error occurred while parsing your RSS feed. Check that it's a valid XML file.";

		}

		return $html;
	}
}
/** Define [rss] shortcode */
if( function_exists('base_rss_feed') && !function_exists('base_rss_shortcode') ) {
	function base_rss_shortcode($atts) {
		extract(shortcode_atts(array(
			'size' => '10',
			'feed' => 'http://wordpress.org/news/feed/',
			'date' => false,
		), $atts));

		$content = base_rss_feed($size, $feed, $date);
		return $content;
	}
	add_shortcode("rss", "base_rss_shortcode");
}

Initial URL
http://www.kevinleary.net/display-rss-feeds-wordpress-shortcodes-simplepie-fetch_feed/

Initial Description
shortcode : 
[rss size="10" feed="http://wordpress.org/news/feed/" date="true"]

Initial Title
Wordpress RSS  shortcode

Initial Tags
wordpress

Initial Language
PHP