Custom feed WordPress: ecco come progettare feed personalizzati per wordpress

Custom rss feed Wordpress

Nell’articolo di oggi vediamo come progettare feed personalizzati per wordpress in pochi semplici passi.

Se avete bisogno di differenziare alcuni feed da quello principale di wordpress o semplicemente volete crearne uno con categorie particolari questo articolo fa sicuramente al caso vostro.

Step1: Inizializziamo il feed

File: functions.php del vostro tema

Incollate il seguente codice:

//Custom rss feed
add_action( 'after_setup_theme', 'trg_rss_template' );
function trg_rss_template() {
  add_feed( 'custom', 'trg_custom_rss_render' );
}
function trgcustom_rss_render() {
  get_template_part( 'feed', 'custom' );
}
//Custom rss feed

Di fatto andiamo a comunicare la route “custom” per i feed e colleghiamo il template rss “custom” al nuovo feed generato.

Step2: Creazione del feed

A questo punto creiamo un file custom-feed.php e mettiamolo nella directory del tema.

<?php
/**
 * Customs RSS template by Targetwebit
 *
 *
 * @package sometheme
 * @subpackage theme
 */


/**
 * Feed
 */
header( 'Content-Type: ' . feed_content_type( 'rss-http' ) . '; charset=' . get_option( 'blog_charset' ), true );
$frequency  = 1;        // Default '1'
$duration   = 'hourly'; // Default 'hourly'. Accetta 'hourly', 'daily', 'weekly', 'monthly', 'yearly'.
$email      = get_the_author_meta( 'email');
$author     = get_the_author();


/**
 * Start RSS feed.
 */
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' ); ?>
>

	<!-- RSS feed defaults -->
	<channel>
		<title><?php bloginfo_rss( 'name' ); ?> Feed</title>
		<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', $duration ); ?></sy:updatePeriod>
		<sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', $frequency ); ?></sy:updateFrequency>
		<atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />

		<!-- Feed Logo (optional) -->
		<image>
			<url>logo.png</url>
			<title>
			<?php bloginfo_rss( 'description' ) ?>
			</title>
			<link><?php bloginfo_rss( 'url' ) ?></link>
		</image>

		<?php do_action( 'rss2_head' ); ?>

		<!-- Start loop -->
		<?php while( have_posts() ) : the_post();

		$postimages = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'medium' );
		$postlink   = '<br /><a href="' . get_permalink() . '">Leggi su tuosito.it</a><br /><br />';

		?>

			<item>
				<title><?php the_title_rss(); ?></title>
				<link><?php the_permalink_rss(); ?></link>
				<guid isPermaLink="false"><?php the_guid(); ?></guid>
				<author><?php echo $email ?><?php echo ' (' . $author . ')' ?></author>
				<image>
					<url><?php echo esc_url( $postimage ); ?>"/></url>
				</image>
				<pubDate><?php echo mysql2date( 'D, d M Y H:i:s +0000', get_post_time( 'Y-m-d H:i:s', true ), false ); ?></pubDate>			
				<description>
					<![CDATA[<img src="<?php echo esc_url( $postimages[0] ); ?>" /> <br /> <?php  echo the_content_rss();  echo $postlink; ?>]]>
				</description>
			</item>

		<?php endwhile; ?>
		<!-- End loop -->
	</channel>
</rss>

Andiamo ad analizzare nello specifico:

In questa porzione di codice vado a settare variabili e header del feed:

/**
 * Feed
 */
header( 'Content-Type: ' . feed_content_type( 'rss-http' ) . '; charset=' . get_option( 'blog_charset' ), true );
$frequency  = 1;        // Default '1'. 
$duration   = 'hourly'; // Default 'hourly'. Accetta'hourly', 'daily', 'weekly', 'monthly', 'yearly'.
$email      = get_the_author_meta( 'email');
$author     = get_the_author();

Inizio a “scrivere” lo scheletro del feed:

/**
 * Start RSS feed.
 */
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' ); ?>
>

A questo punto creo l’header del feed con informazione come titolo, link, description etc

<!-- RSS feed defaults -->
	<channel>
		<title><?php bloginfo_rss( 'name' ); ?> Feed</title>
		<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', $duration ); ?></sy:updatePeriod>
		<sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', $frequency ); ?></sy:updateFrequency>
		<atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />

		<!-- Feed Logo (optional) -->
		<image>
			<url>logo.png</url>
			<title>
			<?php bloginfo_rss( 'description' ) ?>
			</title>
			<link><?php bloginfo_rss( 'url' ) ?></link>
		</image>

		<?php do_action( 'rss2_head' ); ?>

Per finire ecco la sezione responsabile del loop (da variare nel caso usate wp_Query personalizzate:

                <!-- Start loop -->
		<?php while( have_posts() ) : the_post();

		$postimages = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'medium' );
		$postlink   = '<br /><a href="' . get_permalink() . '">Leggi su tuosito.it</a><br /><br />';

		?>

			<item>
				<title><?php the_title_rss(); ?></title>
				<link><?php the_permalink_rss(); ?></link>
				<guid isPermaLink="false"><?php the_guid(); ?></guid>
				<author><?php echo $email ?><?php echo ' (' . $author . ')' ?></author>
				<image>
					<url><?php echo esc_url( $postimage ); ?>"/></url>
				</image>
				<pubDate><?php echo mysql2date( 'D, d M Y H:i:s +0000', get_post_time( 'Y-m-d H:i:s', true ), false ); ?></pubDate>			
				<description>
					<![CDATA[<img src="<?php echo esc_url( $postimages[0] ); ?>" /> <br /> <?php  echo the_content_rss();  echo $postlink; ?>]]>
				</description>
			</item>

		<?php endwhile; ?>
		<!-- End loop -->

Di fatto il feed di questo esempio renderizza il feed base di wp con la variante di mettere il contenuto dentro il tag description anzichè content. Tuttavia potete estendere le funzionalità come meglio desiderate andando a creare anche una query post personalizzata per filtrare – ad esempio – per determinate categorie, autori, tag etc.

A questo punto vi basterà accedere all’url tuosito.it/feed/titolo_dato_al_temaplate_rss nel nostro caso: tuosito.it/feed/custom

Enjoy!

Photo credits “Rss” disponibile su Shutterstock!

Lascia la tua opinione

×