WordPressのカスタマイズ方法やプラグインレビューを中心に、パソコン/動物/植物のことなどを紹介するホームページです
How to change the RSS feed output by WordPress from "publication date order" to "update date order"

WordPressで出力するRSSフィードを「公開日順」から「更新日順」に変更する方法

公開日: 使い方など

いきなりですが、皆さんRSSリーダーって使ってますか??私はFeed Watcherという無料サービスで使わせていただいてます。いろいろな新着記事が一目で見られて大変重宝しております。

このRSSリーダーへ情報を提供しているのがRSS Feedという情報出力機能。主にブログなどの時系列順に投稿を表示するウェブプログラムでは標準搭載されています。WordPressもブログ+αのサイト管理システムですからもちろん付いてます。

でも、RSSリーダーにいろいろなサイトのフィードURLを登録して一覧を見ていると、ニュースサイトのように多数のライターがバンバン投稿を追加しているようなサイト以外では、なかなか新しい記事はないんですよね。

どうしてだろう??と考えた時、更新した投稿はRSSフィードに反映してないことに気づきました。そうなんです。そもそもRSSフィードは新しい投稿に対して「投稿したよ」と伝える機能なので、更新した投稿は過去のものとして扱われるんです。それじゃあ仕方ないか・・・いえいえそんなことはありません。一般のブログサービスとは違い、WordPressなら、今回のカスタマイズを行うことで、更新した投稿も「新しい情報でっせ!」とRSSフィードに含めることができるんです。

多分に漏れずこのサイトも解説めいたことをたくさん書かせていただいてて、毎日たくさんの方に読んでもらっているようです。日記とは違い解説系のサイトはその時に起こったことや思ったことを備忘録代わりに公開したりすることも多いですし、何よりその時の知識を基に公開したものですから、時が経って読み返すと時流に即してなかったり、もっといい方法があったりするんです。

そうしてブラッシュアップした記事を「新しいですよ!」とサイト上で表示しても、サイトに訪問してもらえない限り伝えられない。検索エンジンに認識されてより役に立つ情報だと認識されて・・を待っていても、本当にニーズに合ってるのか?下手したらマイナスになるのか?そんなのを待ってられませんし、せっかく再編集したものがサイトの中に埋もれてしまうのは本当に残念ですよね。参考までにWordPressサイトで「更新日の新しい順」に投稿一覧(訪問者が見る一覧)を表示する方法については、以前に公開した「公開日順」で表示されるWordPressのいろいろなリストを「更新日順」で表示する方法で紹介していますので興味のある方はご覧ください。

そこで今回は、タイトルにも書かせていただいた通り、WordPressのRSSフィードを標準の「公開日の新しい順」ではなく、「更新日の新しい順」に出力し、更新した投稿もRSSリーダーへ登録されている方へお知らせしようというカスタマイズ方法を紹介します。

あまりコードだのプログラムだのに興味のない方でも実装できるよう、まずはパッケージ化したものをダウンロードして、ちょこっと手を加えるだけでできるようにしたものから紹介させていただき、後半で内容が知りたいという方のための詳細情報を紹介していますので、初心者の方でも問題なく実装できると思いますからぜひチャレンジしてみてください。

当然のお話ですが、すべての環境で動作確認をしているわけではありませんので、お使いの環境での動作保証はできません。あくまでも自己責任で導入をお願いします。「どうしても導入したいけど、きちんと設定できるか不安」という方は作業代行を行うこともできますので、こちらからご相談ください(ココナラというサービスを通じて行っております)

カスタマイズ前後でどう変わるかを見てみましょう

特に初心者の方は興味があってここまで読んでみたものの「結局どうなるの?」と疑問に思われるでしょう。そこで、RSSフィードブロックで実際に表示した、本サイトのRSS情報のBefore/Afterを下図で確認してみてください。

まずはカスタマイズ前の画像

そして、カスタマイズ後の画像

上の2つは同じですが、その下3つは違いますよね?(もちろん同じ日に撮ったスクショです)。後者の下3つは最近更新した投稿ですから、RSSブロックで表示される日付(公開日)がすごく古いことが見てわかると思います。まさに「更新日の新しい順」で出力されている証拠です。

今回のカスタマイズではこんな感じにできます。イメージはつかめたかと思いますがいかがでしょうか?

RSSフィードを「公開日順」から「更新日順」に変更する手順(簡易版)

それでは早速カスタマイズを進めていきましょう。

1.必要なファイルを入手する

以下のボタンをクリックして必要なファイル類をダウンロードしてください。

※直リンク防止のため、「Booth」というサービスを使って提供しています(ダウンロードするにはBoothへの登録が必要です)。登録は無料、本ファイルも無料で提供しています。

※「Booth」に登録のない方で、登録する予定のない方は後半の【手作業でRSSフィードを「公開日順」から「更新日順」に変更する手順】を参考に自力でファイルのプログラム変更等を行ってください。

zip形式の圧縮ファイルになっていますので、ダウンロードが終わったら解凍しておいてください。

2.サイトへ入手したファイルを転送する

ダウンロードしたファイル(feed.zip)を解凍し、「feed」というフォルダの中に

  • feed-atom.php
  • feed-rss2.php
  • feed-rdf.php
  • feed-rss.php
  • feed-functions.php

の5つのファイルがあるのを確認してください。間違いなければ現在有効化しているテーマフォルダの中へ「feed」フォルダごとアップロードします。

※テーマフォルダとは、以下の場所のことを指します

  1.  サーバーに接続し、該当のサイトが収容されているフォルダを開きます
  2. 「wp-content」というフォルダを開きます
  3. 有効化しているテーマのフォルダ名を開きます

3の状態になると「style.css」や「functions.php」といったファイルがありますので、そこへ「feed」フォルダごとアップロードしてください。

※アップロードにはFTPクライアントやサーバーのファイルマネージャー(ファイル転送機能)などを使います。そういった環境がない場合には一時的に「File Manager」というプラグインを使うという手もあります(プラグインを使ったファイル転送方法についてはWordPressのプラグイン「File Manager」を使ってサーバー内へファイルを転送する方法をご覧ください)。

3.テーマのfunctions.phpへファイルを読み込むための追記をする

アップロードしたフォルダの中にある5つのファイルは、「feed-functions.php」と、フィードの出力を更新日順に変更したフィードプログラムファイル(4つ)から成り立っています。

「feed-functions.php」には

  • 一旦WordPress標準のフィードプログラムを停止しなさい
  • アップロードしたフィードプログラムを読み込んで動作させなさい

という命令が書かれています。

ここではそれがテーマの中で動作するように設定していきます。

まず、WordPressの管理画面から外観テーマエディタを開いてください

次に右のファイル/フォルダ一覧から「functions.php」をクリックしてください

表示された画面の一番下に以下のコードを追加して保存してください

/** feedテンプレート置き換え用functionの読み込み **/
include 'feed/feed-functions.php';// feedのfunctions


ここまでで今回のカスタマイズについてはおしまいです。お疲れ様でした。

WordPressの管理画面から設定表示とクリックし、「RSS/Atom フィードで表示する最新の投稿数」に指定されている件数の中で、最近公開した投稿よりも最近の日付で更新した投稿がある場合にはRSSリーダーやRSSブロックで

「サイトのURL/feed」

を入力して表示させることで、更新した投稿が挿入された形でリスト表示されますので、確かめてみてください。

※RSSリーダーおよびRSSブロックは一定時間情報をキャッシュ(保存)するようになっています。もしも反映されない場合は1~2時間置いてから再度確認してみてください

この後は今回のカスタマイズの参考にさせていただいた方のページ、RSSリーダーで表示される順番を完全に更新日順にする方法、RSSフィードを利用したURL経由でのアクセスを把握する方法、ダウンロードを行わず手動で今回のカスタマイズをしてみたいという方向けの詳細情報が続きます。WordPressのカスタマイズに興味のある方はぜひ読んでみてください。

参考にさせていただいたページ

今回のカスタマイズを行うにあたって参考にさせていただいたページです。

私のサイトは結構投稿の更新をすることが多く、トップページに表示する投稿一覧を更新日で作るうち、「公開日順」で表示されるWordPressのいろいろなリストを「更新日順」で表示する方法で紹介したようにいろいろなリストも更新日順になるようにし、ところでRSSはどうなの?でたどり着いたページです。私がWordPressのカスタマイズに興味を持ったきっかけである「Simplicity2」テーマ、大人気「Cocoon」テーマの作者【わいひら】さんのブログ記事です。


「Web Shufu」さんのサイト内ページです。わいひらさんの紹介記事では独自のコードが紹介されていたのですが、できればWordPress標準のフィード用ファイルをカスタマイズしたく検索した結果たどり着いたページです。こちらの内容を基本に、不都合な部分や追加部分のヒントはわいひらさんのページを参考にしながら今回のカスタマイズを行いました。


「WordPressカスタマイズ事典」さんのサイト内ページです。「rss2_head」で出力される項目のうち、WordPressのバージョン情報は削除したいという目的で検索してたどり着いたページです。


本当にWordPressのカスタマイズについてはいろいろな方が公開されていて、困ることはほとんどないですね。感謝感謝です。私のサイトもいつかそんな風に参考にしてもらえるようになれるよう、今後もいろいろと挑戦していきます。

完全に更新日順で表示させるには

出力したRSSフィードをRSSリーダーで読み込んで表示する際、ほとんどのRSSリーダーでは取得したフィード情報を公開日順(pubdateタグに記載されている日付順)に並べ替えて表示するようになっています。

ここまでのカスタマイズ方法では、フィードの情報自体は更新日順にサイトで設定した数だけ出力するようになっていますが、公開日はそのままなので、RSSリーダーで表示しても完全に更新日順にはなりません(要するに読み取ったフィード情報の中で「公開日順」にソートされてリーダーには表示されます)。

これを完全に更新日順に表示させるようにする方法があるのですが、この方法が例えば検索エンジンクローラーも見ていて何かに影響するのか?など不明なので、一応追加カスタマイズとして紹介しておきます。どのように変わるのかは以下の画像を参考にしてください。

まずはこの追加カスタマイズ前

そしてこちらが追加カスタマイズ後

(スクリーンショットを撮る際のブロックへのフォーカスの有無により文字色が違いますがご容赦ください・・)

リストの内容は同じですが、順番は違いますよね?そして、追加カスタマイズ前の一覧は日付が公開日なのですごく古い日の投稿のように見えますが、カスタマイズ後は更新日が表示されるので、見た目に新しい投稿に見えます(フィード情報のみ日付の出力方法を変えていますので、サイト自体には何ら影響はありません)。

※ちなみにこの方法は当サイトでも採用しています

各ファイルの日付出力を更新日にするためのファイル編集手順

今回テーマに追加したフォルダの中にあるファイルのうち、

  • feed-atom.php
  • feed-rss2.php
  • feed-rdf.php

に対して変更を行います。

「feed-atom.php」を開き、74行目付近にある

<published><?php echo get_post_time( 'Y-m-d\TH:i:s\Z', true ); ?></published>

というコードを

<published><?php echo get_post_modified_time( 'Y-m-d\TH:i:s\Z', true ); ?></published>

に書き換えて保存します。

次に、「feed-rdf.php」を開き、81行目付近にある

<dc:date><?php echo mysql2date( 'Y-m-d\TH:i:s\Z', $post->post_date_gmt, false ); ?></dc:date>

というコードを

<dc:date><?php echo get_post_modified_time( 'Y-m-d\TH:i:s\Z', true ); ?>

に書き換えて保存します。

最後に「feed-rss2.php」を開き、98行目付近にある

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

というコードを

<pubDate><?php echo get_post_modified_time( 'Y-m-d\TH:i:s\Z', true ); ?></pubDate>

に書き換えて保存します。

これで各フィードファイルの「公開日」として出力される部分が「更新日」になり、RSSリーダー上でも更新日順に表示されるようになります。

おまけ RSSリーダー経由でのアクセスを把握する方法

そもそもRSSリーダー経由や、他のサイトに挿入されたRSSの一覧からどの位のアクセスがあるのかが気になる方向けのおまけ情報です。

基本的にアクセス解析ではRSSリーダーなどからクリックされたものは「リファラ」として認識されます。リファラは他サイトにあるリンクをクリックして訪問したものすべてとなるため、他サイトに張られたリンクをクリックした場合も合算されてしまうため判別が難しいのです。

そこで、せっかく今回RSSフィード用ファイルをカスタマイズしたのですから、ついでにRSSリーダーなどフィードのURLをクリックしたかどうかがわかるようにしておきましょう。

これを行うにはURLパラメーターというのを使います。URLパラメーターについては

で詳しく説明いただいていますのでそちらをご覧ください。

それではRSSフィードに出力される記事のリンクURLをパラメーター付きにする手順を紹介します。

編集するファイルとしては前述した「各ファイルの日付出力を更新日にするためのファイル編集手順」と同じです。そして同じ項で日付を更新日にした行付近にあるコードをそれぞれ変更します。

例えば「feed-rss2.php」であれば、92行目付近にある

<link><?php the_permalink_rss(); ?></link>

というコードを

<link><?php the_permalink_rss(); ?>?ref=rss</link>

へ変更します。この変更により、リンクURLを取得するコードの後ろに「?ref=rss」という文字が追加されるので、アクセス解析上でRSS経由でのアクセスかどうかの判別ができるようになるのです。

その他のファイルも同時に編集しておきましょう。

※これによりRSS経由の訪問には「ページのURL?ref=rss」というパラメーターが付くことになるため、その他リファラ経由とは別ページとしてアクセス解析の一覧等に表示されるようになりますから、別々になってしまうのはどうも・・という方は設定されない方がいいでしょう。

手作業でRSSフィードを「公開日順」から「更新日順」に変更する手順(今回のカスタマイズ内容の詳細)

ここからは、ファイルのダウンロードをしないで、自力で今回の機能追加をしてみたいという方向けの手順となります。もちろんファイルをダウンロードいただいた方も、何をどう変えているのか?など参考になさってください。

今回のカスタマイズでやっていることの概要

今回行うサイトが出力するRSSフィードの並び順を更新日順にするカスタマイズでは、以下のことを行っています。

  1. WordPress標準のRSSフィード生成ファイルを入手
  2. 1のファイルで抽出する投稿の日付を「公開日の新着順」から「更新日の新着順」へ変更する
  3. 標準のRSSフィード生成プログラムを停止し、2のプログラムが動くようにする命令を作成する
  4. 2と3を「feed」というフォルダにまとめる
  5. 4を有効化しているテーマディレクトリへ転送する
  6. 5がテーマで認識される(動作する)ようにする

※前述した簡易手順でファイルのダウンロードをした場合には上記の1~4の手順が不要ということになります。

それでは始めていきましょう。

手順1 WordPress標準のRSS生成ファイルを入手

このファイルは以下の場所にあります。FTPなどを使って実際に動作しているサイトからダウンロードしましょう。

WordPressのインストールフォルダ(index.phpのある場所)wp-includes

「wp-includes」フォルダの中にある以下のファイルをパソコンのデスクトップなどへダウンロードします。

  • feed-atom.php
  • feed-rdf.php
  • feed-rss.php
  • feed-rss2.php

手順2 抽出する投稿の日付を「公開日の新着順」から「更新日の新着順」へ変更する

ダウンロードした4つのファイルそれぞれに更新日基準で投稿を抽出するためのコードを挿入します。各ファイルの記述の流れはほぼ同じですので、feed-rss2.phpを例に手順を紹介します。

「feed-rss2.php」をテキストエディタ(できればメモ帳でない方がいい)を開きます

86行目付近にある

<?php while ( have_posts() ) :

の上に、以下のコードを挿入します

<?php query_posts("&orderby=modified&posts_per_page=".get_option("posts_per_rss"));//更新日順に並び替え ?>

※編集するファイルによっては「wihle()」の前に「<?php」という記述がない場合があります。そうした場合には前後のコードが連結されていますので、上記コードの前に「?>」を、後ろに「<?php 」を追加するようにしてください(PHPプログラムの基本ですので不明な方はBoothよりダウンロードされることをおすすめします)。

次に130行目付近にある

<?php endwhile; ?>

の下に以下のコードを挿入します

<?php wp_reset_query(); ?>

保存したら加工は完了です。それぞれのファイルで同じような記述がありますので、すべてのファイルに対してコードの挿入を行ってください。

手順3 標準のRSSフィード生成プログラムを停止し、2のプログラムが動くようにする命令を作成する

パソコン上でテキストエディタ(メモ帳以外が望ましい)を開き、以下のコードをコピペします。

/*以前のRSS出力をキャンセル */
remove_filter('do_feed_rss2', 'do_feed_rss2', 10);
remove_filter('do_feed_rdf', 'do_feed_rdf', 10);
remove_filter('do_feed_rss', 'do_feed_rss', 10);
remove_filter('do_feed_atom', 'do_feed_atom', 10);
/* 作成したRSS出力を読み込む */
function custom_feed_rss2(){
$template_file = get_stylesheet_directory() .'/feed/feed-rss2.php';
load_template($template_file);
}
add_action('do_feed_rss2', 'custom_feed_rss2', 10);
function custom_feed_rss(){
$template_file = get_stylesheet_directory() .'/feed/feed-rss.php';
load_template($template_file);
}
add_action('do_feed_rss', 'custom_feed_rss', 10);
function custom_feed_atom(){
$template_file = get_stylesheet_directory() .'/feed/feed-atom.php';
load_template($template_file);
}
add_action('do_feed_atom', 'custom_feed_atom', 10);
function custom_feed_rdf(){
$template_file = get_stylesheet_directory() .'/feed/feed-rdf.php';
load_template($template_file);
}
add_action('do_feed_rdf', 'custom_feed_rdf', 10);
/* feedに含まれるWordPressのバージョン情報を削除 */
foreach ( array( 'rss2_head', 'commentsrss2_head', 'rss_head', 'rdf_header', 'atom_head', 'comments_atom_head', 'opml_head', 'app_head' ) as $action ) {
remove_action( $action, 'the_generator' );
}

貼り付けたら、「feed-functions」というファイル名、ファイルの種類は「.php」で保存します。

「feed」という名前のフォルダを作り、先程加工した3つのファイルと「feed-functions.php」を入れれば必要なファイルは完成です。

あとは簡易版の「2.サイトへ入手したファイルを転送する」から先の手順通りに進めれば完了です。

※念のため、フォルダアップロード後、管理画面から外観テーマエディタを開き、「feed」フォルダの中にある4つのファイルを開いてコードがきちんと表示されるかを確認後、何もせずに「更新」ボタンをクリックし、問題なく更新できるかを確認ください(コードに何等かの誤りがある場合にはエラーメッセージが出て更新されませんので、コードを再度見直して対処してください)。

※また、アップロードしたファイルを開いても何も表示されない場合があります。これはメモ帳などで編集した際に文字コードがWordPressで認識されるものではなくなってしまったことが原因です。そうした場合にはパソコン上のファイルを開いてすべてをコピーし、管理画面上同じ名前の編集画面へ直接コピーして保存してください(文字コードについてはWordPressのテーマファイルをアップロードしてもファイルの内容が空になる現象の原因と対処で詳しく解説していますので参照ください)。

手順通り行ったのにエラーがやサイトの不具合が出るときは

手順通りに作業を進めたら、

  • 画面が真っ白になってしまった
  • 【[サイト名] サイトで技術的な問題が発生しています】...

といった画面になり、何もできなくなるケースがあります。原因はコードの記述エラーであることがほとんどです。

そうした場合にはFTPで今回の「feed」フォルダをアップロードした場所を開き、「functions.php」を一旦ダウンロードします。

手順の最後に行ったコードの挿入箇所を削除してください(その他のコードは絶対に削除しないでください、別の動作不良を招きます)。削除したら保存してください。

保存したファイルを元の場所へアップロードします。

これで今回追加したフィード関係のプログラムが一切動作しなくなり、カスタマイズ前に戻ります。再度各ファイルのコード確認などを行って問題を解消してください。

※今回に限らず、自身で紹介されているコードなどをコピーして手動でカスタマイズを行う際にはこうしたエラーが出ることがあります。より安全に導入を行うためにもファイルのダウンロードを行うことをおすすめします。

  • ☆最後までお読みいただきありがとうございました。記事作者のひまあーとです。
    ☆Wordpressでサイトをカスタマイズしていく上で有用な情報を配信しつつ、「ココナラ」でサイトカスタマイズのお手伝い、不具合の修復、サイト引っ越し代行などをさせていただいております。
    ☆Wordpressネタが多いですが、趣味の「園芸」「卓球」などの情報や日々の出来事などもどんどん増やしていきますのでよろしくお願いいたします。

QR Code

このページはモバイル端末でもご覧いただけます

左のQRコードを読み取っていただくと、このページのURLが表示され、簡単にアクセスできます。ぜひモバイル端末でもご覧ください。

WordPressのカスタマイズ・不具合対応などご相談ください

Wordpressのカスタマイズ、不具合解消のご相談はすべてココナラのダイレクトメッセージからお受けしております。まずはこちらのバナーからお気軽にお問い合わせください。

【スポンサーリンク】