web-dev-qa-db-ja.com

から投稿の最終更新日を取得する方法 WP RSSフィード?

私は私たちのRSSフィードを介して、私たちのWordPressサイトからフィードコンテンツを抽出するサードパーティ製のツールを持っています: http://ontariotravelblog.com/feed

フィードは、ブログ投稿の最終更新日を除いて、必要なものすべてを提供してくれます。公開日は含まれますが、これは単にブログが最初に公開された日です。公開後にブログに加えられた編集/変更は、この日付には影響しません。

今興味深いのは、ATOM版のフィード( http://ontariotravelblog.com/feed/atom )には公開日と更新日の両方が含まれていることです。例えば:

 <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>

ATOMフィードに重要なコンテンツがいくつか欠けている(特に、media:thumbnailなどの "media:"要素がいくつか欠けている)ことを除けば、これは素晴らしいことです。

それで、結局のところ、私の質問は、メインのRSSフィードに表示されるATOMフィードエントリに含まれる updated フィールドを取得する方法はありますか? (おそらくいくつかの設定オプションを介して?)

3
RMD

Atom vs RSS2

wp-includes/feed-atom.phpwp-includes/feed-rss2.phpファイルを見てみましょう。

Atomフィード項目のupdated要素は、次のとおりです。

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

RSS2フィード項目のpubDate要素は以下のとおりです。

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

RSS2チャンネルのlastBuildDate要素は以下のとおりです。

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

ネームスペース

RSS2フィードには既に Atom 名前空間が含まれています。

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

そのため、私たちはカスタムの updated 要素に<atom:updated>要素を使用できると思います。それが標準を満たしている場合、またはこれに適した他の名前空間がある場合は、さらにチェックアウトすることをお勧めします。

後者の場合はrss2_nsアクションを使って関連する名前空間を追加することができます。

カスタム要素を挿入する

rss2_itemアクションを使用して、次のようにカスタムアイテム要素を挿入できます。

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

} );

うまくいけば、あなたはあなたのニーズに合わせてそれを調整することができます。

5
birgire