投稿日:
2018年5月18日
最終更新日:
【WordPressのRSS】StaticPressでFeedをhtml形式では無くxml形式で出力する方法
YouTubeも見てね♪
【最新機種】GoPro hero11 Black
最新機種でVlogの思い出を撮影しよう!
[ノースフェイス] THE NORTH FACE メンズ アウター マウンテンライトジャケット
防水暴風で耐久性抜群なので旅行で大活躍です!
レッドブル エナジードリンク 250ml×24本
翼を授けよう!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド
Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!
サンディスク microSD 128GB
スマホからSwitchまで使える大容量MicroSDカード!
目次
Feedの必要性
WordPressはRSS標準搭載
WordPressでサイトを生成すると、標準で以下のようなURLが用意されます。
- http://example.com/?feed=rss
- http://example.com/?feed=rss2
- http://example.com/?feed=rdf
- http://example.com/?feed=atom
パーマリンクをカスタムしている場合は以下のURLとなります。
- http://example.com/feed/
- http://example.com/feed/rss/
- http://example.com/feed/rss2/
- http://example.com/feed/rdf/
- http://example.com/feed/atom/
アクセスするとこんな感じです。
StaticPressを利用した際の問題
HTMLファイルになってしまう
StaticPressを使用して、上記のFeed情報を出力するとHTMLファイルとして出力されてしまいます。
これはURLがfeed/
となっているため、デフォルトでindex.html
に出力されてしまっています。
解決方法
こちらを解決するには、StaticPressS3にてS3バケットに転送する際にファイルの拡張子をhtmlからxmlに変更するようにします。
そのためにclass-S3_helper.php
の62行目辺りを以下のように修正してください。
※{}内の部分は置き換えてください
※2019年6月8日追記 以前の方法だと後に行われたfeedページで上書きされていたのでトップのフィードのみ対象にするように修正
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//62行目辺り
// S3 Upload
public function upload($filename, $upload_path = null, $bucket = null) {
if (!file_exists($filename) || !$this->s3)
return false;
$object_filename = $filename;
$isFeed = false;
try {
if( strstr($filename, '{Wordpressインストールディレクトリ}/{StaticPress出力ディレクトリ}/feed/index.html') ){
$object_filename = '{Wordpressインストールディレクトリ}/{StaticPress出力ディレクトリ}/feed/index.xml';
$upload_path = 'feed/index.xml';
$isFeed = true;
}elseif(strstr($upload_path, 'feed/index.html')){
return;
}
if (!$upload_path)
$upload_path = $filename;
$args = array_merge($this->options, array(
'Key' => $upload_path,
'Body' => $this->file_body($filename),
'ContentType' => $this->mime_type($object_filename, $isFeed),//$object_filenameに変更、第二引数も追加
|
StaticPressプラグインの全容が分かればもっとスマートにいけそうですが、今回はそこまではやりません。
気になる方はやってみてください。笑
また、mime_typeもtext/html
ではなくapplication/rss+xml; charset=UTF-8
に変える必要があるので、class-S3_helper.php
の194行目辺りを以下のように修正してください。
※charset=UTF-8を入れないと日本語が文字化けしてしまいます
1
2
3
4
5
6
7
8
9
10
11
|
private function mime_type($filename, $isFeed){//第二引数追加
static $info;
if (!isset($info)) {
$magic_file = '/etc/httpd/conf/magic';
$info = file_exists($magic_file)
? new FInfo(FILEINFO_MIME_TYPE, $magic_file)
: new FInfo(FILEINFO_MIME_TYPE);
}
if( $isFeed ){//feedファイルの場合の早期リターン文の追加
return 'application/rss+xml; charset=UTF-8';//rss用のMimeType指定
}
|
確認
では、実際に再構築して確認してみましょう。
正常に、xml形式で転送されるようになりましたね♪
FeedのURLが管理サーバーのものになる
出力されたFeedの内容をみると、一部のURLがWordPressを載せているサーバーのURLになったままの部分があると思います。
このままだとうまくFeedが働きません。
対応方法
こちらを解決するには、StaticPressのplugin.php
の末尾に以下を追加する必要があります。
1
2
3
4
5
6
7
8
9
|
add_action('StaticPress::file_put', 'replace_url_of_feed', 2);
function replace_url_of_feed($file_dest, $url){
if(strstr($file_dest, '/feed/index.html')){
$buff = file_get_contents($file_dest);
$replace = substr(static_press_admin::static_url(), 0, -1);
$content = str_replace(home_url(),$replace,$buff);
file_put_contents($file_dest, $content);
}
}
|
確認
では、実際に再構築して確認してみましょう。
こちらも正常に運用しているドメインに置き換わるようになりましたね♪
終わりに
Feed情報は他のサイトに更新情報を伝える上では、非常に貴重な情報です。
使わないとしても、いつでも使える状態にしておくと良いでしょう♪