【WordPress】どうしてもRSSフィードが404を返すので、RSSを出力するスクリプトを書いた

2013 年 10 月 12 日 土曜日

トップページのUrlを変更したあたりから、このブログのRSSフィードが正しく表示されなくなった。2日間試行錯誤した末、諦めてXMLファイルを生成するスクリプトを書いた。

もっと正しい方法があるだろうし、お勧めできる方法ではないかもしれないが、備忘録として。他に良い案があればぜひ教えて欲しい。

WordPressの構成

バージョン
WordPress 3.3.1
一般設定 > WordPressアドレス
http://www.bmoo.net/archives
一般設定 > サイトアドレス
http://www.bmoo.net/
実際にWordPressを設置しているアドレス
http://www.bmoo.net/wordpress/
パーマリンク設定 > パーマリンク
/archives/%year%/%monthnum%/%post_id%.html

1つのWordPressで複数のブログを管理しているので、実際にWordPressを設置しているアドレスと一般設定 > WordPressアドレスは異なる。

/archives/に設置している.htaccessは以下の通り。

1
2
3
4
RewriteEngine On
 
RewriteRule (.*) /wordpress/$1 [L]
RewriteRule . /wordpress/index.php [L]

また、トップページのURLを変えたからといって、今更パーマリンクは変えたくないので、パーマリンク設定では先頭に/archives/を記載している。

なぜ、問題が発生したか。予想。

トップページのUrlを数日前にhttp://www.bmoo.net/archives/ からhttp://www.bmoo.net/ に変更したことが問題発生の引き金だと思うが、なぜ変更すると表示されなくなったかは分からない。

これまでRSSを配信していたUrl http://www.bmoo.net/archives/index.xml が404を返すようになった。http://www.bmoo.net/archives/feed/rss や http://www.bmoo.net/feed 、 http://www.bmoo.net/index.xml なども404。

XMLファイルを生成するスクリプト

固定ページにXMLファイルを生成するスクリプトを書いた。この固定ページにアクセスすると毎回XMLファイルが更新されるという荒々しいものだ。

固定ページでPHPを実行させるためにExec-PHPプラグインをインストール済み。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
$content = '<?xml version="1.0" encoding="utf-8"?>';
$content .= '<rss version="2.0">';
$content .= '<channel>';
$content .= '<title>bmoo.net</title>';
$content .= '<description>国内/海外のニュースやウェブサイト、ツールをご紹介</description>';
$content .= '<link>http://www.bmoo.net</link>';
$content .= '<lastBuildDate>' . mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false) . '</lastBuildDate>';
$content .= '<managingEditor>bonkbonbon@gmail.com (bonkbonbon)</managingEditor>';
$args = array( 'numberposts' => '30', 
               'post_status' => 'publish' );
$recent_posts = wp_get_recent_posts($args);
foreach($recent_posts as $post){
    $content .= '<item>';
    $content .= '<title>';
    $content .= $post["post_title"];
    $content .= '</title>';
    $content .= '<link>';
    $content .= get_permalink($post["ID"]);
    $content .= '</link>';
    $content .= '</item>';
}
$content .= '</channel>';
$content .= '</rss>';
file_put_contents("feed.xml", $content);
?>

これで、この固定ページにアクセスすると、アクセスした時点での最新記事がRSSに反映される。RSSフィードはもともとFeedBurnerで配信していたので、FeedBurnerのXML Sourceを今回生成したXMLファイルパスに変更した。

冒頭にも書いたが、正しい解決方法は他にあるはずだ。もし良い案があるのであれば、是非教えて欲しい。

スポンサードリンク

関連記事

コメントをどうぞ

トラックバック

このエントリーのトラックバックURL:

http://www.bmoo.net/archives/2012/02/312814.html/trackback