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.