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ページで上書きされていたのでトップのフィードのみ対象にするように修正
//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を入れないと日本語が文字化けしてしまいます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の末尾に以下を追加する必要があります。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情報は他のサイトに更新情報を伝える上では、非常に貴重な情報です。
使わないとしても、いつでも使える状態にしておくと良いでしょう♪
