Widget, affichage d’un flux RSS : contrôler l’ordre de tri…

Quelque soit l’origine du flux (feed) RSS, on est obligé de constater que l’affichage se fait toujours par date des éléments, de la plus récente (ou future) à la plus ancienne.
Pourquoi ?
Parce qu’en fait si on se promène dans le source des widgets par défaut (default-widgets.php - class WP_Widget_RSS), on observe que le flux est le résultat d’une fonction (fetch_feed) qui elle même fait appelle à une classe d’un framework SimplePie. Or dans cette classe (SimplePie), le tri se fait par défaut par la date décroissante…
La solution
Il faut donc utiliser le filtre (wp_feed_options de fetch_feed) et utiliser la méthode (enable_order_by_date) qui est prévue dans la classe pour annuler ce tri d’affichage. Ce sera donc le tri du flux lui-même prévu dans la requête du site distant qui sera pris en compte.
Dans l’exemple ci-dessous, on pourrait faire un test pour n’appliquer ce filtre qu’à quelques urls…

add_action ('wp_feed_options', 'pip_wp_feed_options', 10, 2 );
function pip_wp_feed_options( $feed, $url ) {
	//error_log($url . serialize($feed));
	$feed->enable_order_by_date(false);
}

Dans un site, ce filtre permet de conserver le tri du flux délivré par le site distant qui donne la date d’un évènement à venir, on souhaitait donc conserver la chronologie normale.