Comment j’ai fait mon flux RSS avec wordpress

Cette méthode m’a permis de faire mon flux RSS ‘MBH’ sans ajouter de plugin WP. Mes émissions sont rangées dans la catégorie ’emission’. J’utiliser les champs personnalisés pour compléter les informations demandées par itunes.

RSS Made By Humans

J’ai modifié le template très simplement, voilà comment.

NB. Cette façon de faire oblige à choisir un thème avant.

Modifier le fichier functions.php

Placer le code suivant à la fin du fichier

/wp-content/themes/<nom du thème>/functions.php

Replacer ‘mbh’ par le nom du flux.

/**
 * My custom rss 'mbh'
 */

add_action('init', 'customRSS');
function customRSS(){
 add_feed('mbh', 'customRSSFunc');
}

function customRSSFunc(){
 get_template_part('rss', 'mbh');
}

La dernière ligne indique à WP d’aller chercher un fichier nommé : rss-mbh.php. Il faut le créer dans le même répertoire que functions.php.

Ce fichier contient le template du flux RSS personnalisé. Par exemple :

<?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 = 500; // The number of posts to show in the feed
$posts = query_posts('showposts=' . $postCount.'&category_name=emission');
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><?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>
 <?php do_action('rss2_head'); ?>
 <?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:order><?php echo $item_counter++; ?></itunes:order>
 <?php do_action('rss2_item'); ?>
 </item>
 <?php endwhile; ?>
</channel>
</rss>

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

A la première exécution, cela ne fonctionne pas. Il faut rafraîchir les règles de réécriture. Pour cela, j’ai ajouté les 2 lignes suivantes à la fin du fichier functions.php. On rafraichit la page xml et on commente les 2 lignes.

global $wp_rewrite;
$wp_rewrite->flush_rules();

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

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.

Dans le template, les commandes comme <?php do_action(‘rss2_item’); ?> appellent des actions définies dans le fichier functions.php.

A la fin du fichier functions.php, après celle vues plus haut, on ajoute ces lignes :

function add_custom_fields_to_rss() {
 if($audio_file_duration = get_post_meta(get_the_ID(), 'audio_file_duration', true)) {
 ?>
 <itunes:duration><?php echo $audio_file_duration ?></itunes:duration>
 <?php
 }
}
add_action('rss2_item', 'add_custom_fields_to_rss');

Il faut remplacer audio_file_duration par le nom de votre champ personnalisé.

Et remplacer itunes:duration par le tag que vous voulez voir dans le RSS.

Ce code est appelé par le template avec commande do_action(‘rss2_item’);. Il va placer la ligne XML <itunes:duration></itunes:duration> avec la valeur donné dans votre article.

On prend bien soin d’ajouter le namespace itunes xmlns:itunes= »http://www.itunes.com/dtds/podcast-1.0.dtd » dans header du template.