WordPressのRSSやAtomのURLって変更できないの?

functions.phpでフィルタによるカスタマイズ処理を記述すれば変更できるぞ。

ブログサイトに欠かせない要素の一つに、「RSS」や「Atom」などの「フィード」がある。行きつけのサイトのフィードを対応ソフトに登録しておけば、様々なサイトの新着情報をまとめてチェックできて便利だ。
定番ブログエンジンの「WordPress」にも、これらのフィードを出力する機能が標準搭載されているが、「http://example.com/rss」のような拡張子無しのURLになってしまい、管理画面でのカスタマイズもできない。
拡張子が無いと中途半端な感じがするし、他のブログエンジンからの移行時にはフィードのURLが変わってしまうと既存の読者の情報取得に支障が生じる恐れもあるので、どうにか変更したいところだ。
フィードのURLをカスタマイズしたければ、「functions.php」にスクリプトを追加してやろう。画像ページや固定ページなどのURLの改造では、URLの認識ルールの追加とURLの生成処理の書き換えの2つのフィルタを追加すればいいが、フィードURLの改造には誤ったリダイレクトの抑止処理も必要となるぞ。

function my_feed_link_rule($rules){
	return(array(
		'rss\\.xml'=>'index.php?feed=rss2',
		'atom\\.xml'=>'index.php?feed=atom',
		'index\\.rdf'=>'index.php?feed=rdf'
	)+$rules);
}
add_filter('rewrite_rules_array', 'my_feed_link_rule');

function my_feed_link($link,$feed=""){
	switch($feed){
		case('atom'):return(home_url('/atom.xml'));
		case('rdf'):return(home_url('/index.rdf'));
		case('rss'):return(home_url('/rss.xml'));
		case('rss2'):return(home_url('/rss.xml'));
		default:return($link);
	}
}
add_filter('feed_link','my_feed_link',10,2);

if(preg_match('@(atom\\.xml|index\\.rdf|rss\\.xml)$@sui',$_SERVER['REQUEST_URI'])){
	remove_action('template_redirect', 'redirect_canonical');
}

フィードのURLをカスタマイズするには、functions.phpにこのようなスクリプトを追加しよう。一つ目のfunction~add_filterではURLの認識ルールを追加し、2つ目ではフィードURLの生成処理を上書きしている。
その後の「if(preg_match(…」以下では、フィードのURLへのアクセス時に「redirect_canonical」の処理の登録を解除している。
この「redirect_canonical」というのは、旧式のURLなどへのアクセスを正式なURLへ転送する処理だが、フィードURLのカスタマイズが想定されておらず、カスタマイズしたフィードURLにアクセスすると誤ったURLへの転送が発生してしまうので、実行を抑止してやる必要があるのだ。


001

処理を記述したfunctions.phpをアップロードして、管理画面の「設定」→「パーマリンクの設定」で「変更を保存」ボタンを押すと、カスタマイズしたURLが認識されるようになるぞ。

2016年05月01日 11時08分
©教えて君.net All Rights Reserved.