Comment j’ai fait mon flux RSS avec wordpress

Mes émissions sont rangées dans des articles, dans la catégorie ’emission’. Le flux rss contiendra uniquement les articles de cette catégorie. J’utilise les champs personnalisés pour compléter les informations demandées par itunes et pour inclure les informations du fichier mp3.

RSS Made By Humans

J’ai créé mon plugin wordpress très simplement, voilà comment.

Le plugin

Allez sur votre hébergement de wordpress. Créez un répertoire du nom de votre plugin. Par exemple :

/wp-content/plugins/MBH-my-RSS-generator/

NB. Peu importe le nom. Le plugin n’est pas destiné à aller dans la base de plugins de wordpress. Il doit juste être unique dans votre répertoire de plugins.

Ajoutez un fichier .php qui doit avoir le même nom que le répertoire. Dans notre exemple : 

MBH-my-RSS-generator.php
<?php
/*
Plugin Name: MBH-my-RSS-generator
Plugin URI: https://madebyhumans.fr/
Description: My Podcast RSS Plugin
Version: V0-20180915
Author: Path
Author URI: https://madebyhumans.fr/
License: WTFPL
License URI: http://www.wtfpl.net/
*/

defined( 'ABSPATH' ) or die( 'No script kiddies please!' );

add_action('init', 'addMyRSS');

function addMyRSS(){
add_feed('myrss', 'renderMyRSS');
}

function renderMyRSS (){
include('myrss.php');
}
?>

Le 1ère partie de commentaire sont des informations destinées à wordpress. Mettez ce que vous voulez.

Le code PHP demande à WP de d’exécuter la fonction addMyRSS une fois à l’initialisation.

La fonction addMyRSS ajoute votre flux rss avec le nom ‘myrss‘ et indique la fonction à utiliser (renderMyRSS) au moment où le flux est demandé. Le flux est alors disponible avec ce chemin :

http://<votre domaine>/myrss

Vous pouvez donner le nom que vous voulez tant que ça passe dans un lien web. Ne mettez pas d’accents et pas d’espaces par exemple.

Enfin, la fonction renderMyRSS va chercher le fichier myrss.php qui génère le XML du flux RSS à proprement parler.

Le template XML

Ce fichier contient le template XML du flux RSS personnalisé. C’est le 2e et dernier fichier du plugin. Par exemple myrss.php :

<?php
/**
 * Template Name: Custom RSS Template - Feedname
 * http://www.wpbeginner.com/wp-tutorials/how-to-create-custom-rss-feeds-in-wordpress/
 */
$item_counter = 0;
$postCount = 1000; // The number of posts to show in the feed
$posts = query_posts('showposts=' . $postCount.'&category_name=emission');
//header( 'Content-Type: application/rss+xml' );
header('Content-Type: '.feed_content_type('rss-http').'; charset='.get_option('blog_charset'), true);
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/"
 xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
 xml:lang="fr-FR"
	<?php do_action('rss2_ns'); ?>>
	<channel>
		<title><![CDATA[<?php bloginfo_rss('name'); ?>]]></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 echo get_option('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>
		<generator>MoutMoutRSS</generator>
		<?php while(have_posts()) : the_post(); ?>
		<item>
			<title><?php the_title_rss(); ?></title>
			<link><?php the_permalink_rss(); ?></link>
			<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>
			<guid isPermaLink="false"><?php the_guid(); ?></guid>
			<description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
			<content:encoded><![CDATA[<?php the_excerpt_rss() ?>]]></content:encoded>
			<?php rss_enclosure(); ?>
			<itunes:duration><?php echo get_post_meta(get_the_ID(), 'audio_file_duration', true); ?></itunes:duration>
			<itunes:order><?php echo $item_counter++; ?></itunes:order>
			<itunes:duration><?php echo get_post_meta(get_the_ID(), 'audio_file_duration', true); ?></itunes:duration>
		</item>
		<?php endwhile; ?>
	</channel>
</rss>

Au début du template, on note le filtre &category_name=emission sur la commande query_posts

On peut noter dans le fichier template le tag <itunes:order> que l’on fabrique avec un compteur.

Le fichier mp3 est inclus dans le rss avec la commande rss_enclosure();

Champs personnalisés

Pour ajouter, par exemple le tag <itunes:duration>, on va utiliser les champs personnalisés.

Pour cet exemple, j’ai ajouté le champ personnalisé audio_file_duration

NB. Les champs personnalisés ne sont pas visibles par défaut. Pour les afficher, il faut cocher dans le panneau « Options de l’écran » en haut à droite du tableau de bord.

Et voilà !! 🙂