web-dev-qa-db-fra.com

Comment obtenir la dernière date de mise à jour d'un article à partir d'un WP Flux RSS?

J'ai un outil tiers qui extrait le contenu des flux de notre site WordPress, via notre flux RSS: http://ontariotravelblog.com/feed

Le flux me fournit tout ce dont j'ai besoin, à l'exception de la dernière date de mise à jour de l'article de blog; la date de publication est indiquée, mais il s’agit simplement de la date à laquelle le blog a été publié pour la première fois; les modifications apportées au blog après la publication n’affectent pas cette date.

Ce qui est intéressant, c’est que la version ATOM du flux ( http://ontariotravelblog.com/feed/atom ) inclut à la fois la date de publication et la date de mise à jour, par exemple:

 <entry>
  ...
    <title type="html">
        <![CDATA[8 Songs for Your Ontario Summer Road Trip Playlist]]>
    </title>
    <id>http://ontariotravelblog.com/?p=5621</id>
    <updated>2016-06-09T16:40:46Z</updated>
    <published>2016-05-10T16:25:35Z</published>
 ...
 </entry>

Ce qui est excellent, sauf que certains éléments critiques manquent dans le flux ATOM (notamment un certain nombre d'éléments "media:", tels que media: vignette, etc.).

Après tout cela, ma question est la suivante: existe-t-il un moyen de faire en sorte que le champ updated , inclus dans l’entrée du flux ATOM, apparaisse sur le flux RSS principal? (peut-être via une option de configuration?)

3
RMD

Atom vs RSS2

Regardons les fichiers wp-includes/feed-atom.php et wp-includes/feed-rss2.php.

L'élément updated de l'entrée de fil Atom est:

<updated><?php 
    echo mysql2date(
        'Y-m-d\TH:i:s\Z', 
        get_lastpostmodified('GMT'), 
        false 
    ); 
?></updated>

L'élément pubDate de l'élément de fil RSS2 est:

<pubDate><?php 
    echo mysql2date(
        'D, d M Y H:i:s +0000', 
        get_post_time('Y-m-d H:i:s', true), 
        false
    ); 
?></pubDate>

L'élément lastBuildDate du canal RSS2 est:

<lastBuildDate><?php 
    echo mysql2date(
        'D, d M Y H:i:s +0000', 
        get_lastpostmodified('GMT'), 
        false
    ); 
?></lastBuildDate>

Espace de noms

Le flux RSS2 contient déjà le Atom namespace:

xmlns:atom="http://www.w3.org/2005/Atom"

je pense donc que nous pouvons utiliser l'élément <atom:updated> pour notre élément updated element personnalisé. Vous voudrez peut-être aller plus loin, si cela répond à la norme ou s'il existe d'autres espaces de noms possibles pour cela.

Dans ce dernier cas, nous pouvons utiliser l'action rss2_ns pour ajouter l'espace de nom approprié.

Injecter un élément personnalisé

Nous pouvons utiliser l'action rss2_item pour injecter des éléments d'élément personnalisés, tels que:

add_action( 'rss2_item', function()
{   
    printf( 
        '<atom:updated>%s</atom:updated>',
         get_post_modified_time( 'D, d M Y H:i:s +0000', true )
    );

} );

J'espère que vous pourrez l'adapter à vos besoins.

5
birgire