Wordpress の RSS フィードのカスタマイズ

WordPress の RSS フィードのカスタマイズ

もう何万回もブログで使われたネタなのでしょうけど、私の環境でも少々特殊なことをする必要があったため、Wordpress での RSS フィード出力のカスタマイズを備忘録を兼ねて掲載いたします。

このカスタマイズで実現している事:
この AVALON STUDIO ウェブサイトは CDN 側に DNS を設定しており、Wordpress の編集環境と公開環境で URL が異なっております。なので、何の工夫もせずにおくと、公開環境で編集環境の URL が出力されるという残念なことになってしまいます。そこで、編集環境ではなく公開環境の URL をベタ打ちで記述した RSS フィードを出力する、というのが今回のゴールとなります。

RSS 機能のチャイルドテーマ化

なんにせよシステムのコードに手を加えるわけですので、チャイルドテーマ(子テーマ)で編集する必要があります。

まず、wp-include フォルダにある feed-rss2.php を チャイルドテーマフォルダにコピーします。ここでは仮にチャイルドテーマのフォルダを themename-child と仮定します。
したがって、 themename-child\feed-rss2.php というファイルが作成されたことになります。

チャイルドテーマの function.php を編集

コピーした feed-rss2.php は一度横に置いておき、次にチャイルドテーマの function.php を編集します。すでに themename-child\function.php が存在しているようであればそれを開く、まだ存在していないようであれば themename-child\function.php となるようにファイルを新規作成します。

そしてその themename-child\function.php に以下の構文を追加します。

何をやっているかというと、既存の RSS 出力の関数を参照しないようにして、HTML 内に出力される RSS 参照のヘッダータグを出力させないようにしています(RSS 関連だけでなく、ついでに他のタグも削除してます)。

そしてチャイルドテーマにコピーした themename-child\feed-rss2.php を参照する構文を追加しています。

ただしこの時点ではチャイルドテーマ内の feed-rss2.php もオリジナルと同じ内容なので、出力される内容も同じものです。これはこの後変更します。

チャイルドテーマの feed-rss2.php の書き換え

さて、ここで RSS フィードに出力される内容を書き換えていきます。

まず 40 行目付近に以下のコードがあるかと思います。

ここを、公開環境の URL に変更します。

そしてその下、90~95行目あたりに <item> で始まるエリアがあると思います。その <item> の2行下に以下のコードがあるかと思います。ここが個別の記事の URL を出力する箇所になります。

私の環境では冒頭で申したように編集環境と公開環境の URL が異なっているため、Wordpress からの出力をルートからの相対リンクにするため Relative URL というプラグインを入れております。このため、ここに出力されるコードはプラグインにより http(s)://www.hogehoge.com というドメインの部分が除去され、

<link>/blog/wordpress/linkcard/</link>

というような形式で出力されます。ですので、ここに公開環境の URL を静的に付与してあげます。
すなわち、

と変更してあげます。

これで、Wordpress から出力される RSS2 形式のフィードの中身が変更されました。試しに https://www.avalon-studio.work/feed/ にアクセスしてみましょう。ちゃんとベタ打ちした URL に置き換わっていることが確認できると思います。

header.php に参照リンクの追加

このままでも feed の運用的には問題ないのですが、各記事ページから Feed に辿れるように、RSS へのリンクを設定してあげます。こちらは wp-content\(お使いのテーマのフォルダ)\header.php の中身に1行追加するだけです(本当はチャイルドテーマ使ったほうが良いのでしょうけど、1行だけですから・・・)
※テーマがバージョンアップした際はこのカスタマイズが消えますので、ここだけ再度作業を行ってください

以上で、カスタマイズした RSS が出力でき、それを参照する HTML タグを出力することができました。