Flux rss invalide : comment corriger.

Les flux rss permettent de suivre automatiquement les publications d’un site. Parfois, le flux rss devient inutilisable.

Cet article propose un moyen simple de corriger le problème le plus courant : l’insertion de caractères parasites en début du flux rss généré par WordPress.

Identifier le problème

Lorsqu’un flux rss n’est plus lisible par un agrégateur (programme dédié, navigateur, client de messagerie…), il est possible de le tester avec le validateur proposé par le W3C.

Voici un flux incorrect :

Le validateur indqiue une erreur dans le flux rss testé
Erreur signalée par le validateur de flux rss du W3C

Afficher le flux dans Google Chrome permet de mettre en évidence qu’un caractère parasite apparaît en tout début du flux :

Le premier caractère affiché est un blanc
Caractère blanc parasite
Haut de page

Suppression des caractères parasites

Le problème vient généralement du tampon de sortie qui n’a pas été vidé avant l’émission du flux rss.

Voici un code à insérer dans le fichier functions.php du thème ou dans une extension (plugin ou mu-plugin) :

add_action( 'do_feed_rss2', 'wpdf_retire_parasites_rss',1 );

function wpdf_retire_parasites_rss() {
    while (ob_get_level() > 0)    //    tant qu'un tampon de sortie est actif
        {
            ob_end_clean();    //    vider le tampon
        }
}    //    fin fonction wpdf_retire_parasites_rss

Analysons ce code :

add_action( ‘do_feed_rss2‘,  »,1 );

On ajoute la fonction personnalisée « wpdf_retire_parasites_rss » au crochet de type action ‘do_feed_rss2″.
Ce crochet est appelé juste avant l’émission du flux rss.

À noter : la priorité à associer à la fonction dans le crochet est maximale (1).

Analyse de la fonction « wpdf_retire_parasites_rss » :

while (ob_get_level() > 0)

La fonction s’exécute tant qu’un tampon de sortie est actif.

ob_end_clean();

La fonction nettoie le tampon courant, ce qui a aussi pour effet de le dépiler. S’il s’agissait du dernier tampon dans la pile, la boucle prend fin, sinon le tampon suivant va être nettoyé.

Ce code s’applique au flux de type « rss2 », tant pour les articles que les commentaires. Mais WordPress sait gérer plusieurs types de flux rss : rdf, rss, rss2 et atom.

Voici le code pour généraliser le nettoyage des caractères parasites à l’ensemble des flux rss fournis par WordPress :

/** 
 *	Retirer d'éventuels caractères parasites en début de flux rss
 *
*/

add_action( 'do_feed_rdf', 'wpdf_retire_parasites_rss',1 );
add_action( 'do_feed_rss', 'wpdf_retire_parasites_rss',1 );
add_action( 'do_feed_rss2', 'wpdf_retire_parasites_rss',1 );
add_action( 'do_feed_atom', 'wpdf_retire_parasites_rss',1 );

function wpdf_retire_parasites_rss() {
	while (ob_get_level() > 0)	//	tant qu'un tampon de sortie est actif
        {
	       ob_end_clean();	//	vider le tampon
        }
}	//	fin fonction wpdf_retire_parasites_rss
Retirer les caractères parasites en début de flux rss

On n’oublie pas de vérifier que le flux rss est redevenu valide :

Le validateur du W3C confirme que "This is a valid RSS fedd"
Flux rss valide
Haut de page

L’extension (plugin)

Voici le code à insérer dans un fichier « .php » que vous déposez dans le sous-répertoire « plugins » ou « mu-plugins » :

<?php
/*
Plugin Name: wpdf_rss
Description: fonction de gestion des flux rss
Version: 1.1
Plugin URI: http://dfarnier.fr/rss-invalide/
Author: Daniel Farnier
License:     GPL v2 or later


Copyright 2016 - Daniel Farnier (daniel@dfarnier.fr)

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*/

if ( !defined('ABSPATH') ) exit ('Faites demi-tour'); // Bloquer si la fonction n'est pas appelée depuis Wordpress

/** 
 *	Retirer d'éventuels caractères parasites en début de flux rss
 *
*/

add_action( 'do_feed_rdf', 'wpdf_retire_parasites_rss',1 );
add_action( 'do_feed_rss', 'wpdf_retire_parasites_rss',1 );
add_action( 'do_feed_rss2', 'wpdf_retire_parasites_rss',1 );
add_action( 'do_feed_atom', 'wpdf_retire_parasites_rss',1 );

if ( ! function_exists( 'wpdf_retire_parasites_rss' ) ) {
	function wpdf_retire_parasites_rss() {
		while (ob_get_level() > 0) {	//	tant qu'un tampon de sortie est actif
			ob_end_clean();	//	vider le tampon
		}	//	fin boucle while
	}	//	fin fonction wpdf_retire_parasites_rss
}	//	fin test si fonction 'wpdf_retire_parasites_rss' existe

?>
Extension retirant les caractères parassites en début de flux rss
Haut de page

Une réflexion sur « Flux rss invalide : comment corriger. »

  1. Bonjour,
    J’ai un soucis avec le flux RSS de mon site WP
    En regardant j’ai l’erreur suivante:
    Warning: array_filter() expects parameter 1 to be array, null given in /homepages/2/d225569217/htdocs/aloevera-bienetre-beaute/wp-includes/general-template.php on line 1135 Warning: implode(): Invalid arguments passed in /homepages/2/d225569217/htdocs/aloevera-bienetre-beaute/wp-includes/general-template.php on line 1135

    Est ce qu’avec votre plugin cela va supprimer ce message et régler mon problème?

    Merci d’avance

    Michel

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.